1.1 简介

SQL Server 中,用户定义表类型是指用户所定义的表示表结构定义的类型。您可以使用用户定义表类型为存储过程或函数声明表值参数,或者声明您要在批处理中或在存储过程或函数的主体中使用的表变量。 若要创建用户定义表类型,请使用CREATE TYPE语句。为了确保用户定义表类型的数据满足特定要求,您可以对用户定义表类型创建唯一约束和主键。

1.2 使用例题

在创建用户定义表类型前先建立一个数据库表

USE [Contacting] GO SET ANSI_NULLS ON GO

SET QUOTED_IDENTIFIER ON GO

SET ANSI_PADDING ON GO

CREATE TABLE [dbo].[Contact](  [ContactID] [uniqueidentifier] NOT NULL,  [FirstName] [nvarchar](80) NOT NULL,  [LastName] [nvarchar](80) NOT NULL,  [Email] [nvarchar](80) NOT NULL,  [Phone] [varchar](25) NULL,  [Created] [datetime] NOT NULL, PRIMARY KEY CLUSTERED (  [ContactID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]

GO

SET ANSI_PADDING OFF GO

ALTER TABLE [dbo].[Contact] ADD  DEFAULT (getdate()) FOR [Created] GO

然后创建一个用户定义表类型 InsertContacts

USE [Contacting] GO CREATE TYPE [dbo].[ContactStruct] AS TABLE(  [ContactID] [uniqueidentifier] NOT NULL,  [FirstName] [nvarchar](80) NOT NULL,  [LastName] [nvarchar](80) NOT NULL,  [Email] [nvarchar](80) NOT NULL,  [Phone] [varchar](25) NOT NULL,  PRIMARY KEY CLUSTERED (  [ContactID] ASC )WITH (IGNORE_DUP_KEY = OFF) ) GO

SQL Server Management Studio看到的结果如下:

现在我们开始使用用户定义表类型 编写存储过程

USE [Contacting] GO CREATE PROCEDURE [dbo].[InsertContacts]  @contacts AS ContactStruct READONLY AS  INSERT INTO Contact(ContactID, FirstName, LastName, Email, Phone)  SELECT ContactID, FirstName, LastName, Email, Phone FROM @contacts; RETURN 0

1.3 使用限制(很遗憾无法在表值参数中返回数据。 表值参数是只可输入的参数;不支持 OUTPUT 关键字。 )

请注意,用户定义表类型使用有以下限制: 1.在创建用户定义表类型定义后不能对其进行修改。(没搞懂为什么不可以修改) 2.不能在用户定义表类型的计算列的定义中调用用户定义函数。 3.无法对用户定义表类型创建非聚集索引,除非该索引是对用户定义表类型创建PRIMARY KEY 或UNIQUE约束的结果。 4.用户定义表类型不能用作表中的列或结构化用户定义类型中的字段。

Sql server 浅谈用户定义表类型的更多相关文章

  1. SQL Server 用户定义表类型

    用户定义表类型: CREATE TYPE [dbo].[TVP_Location] AS TABLE( [Location] [varchar](50) NOT NULL, [Address] [va ...

  2. sqlserver 用户定义表类型

    有时需要将内存中的表与数据库中的表比较,比如Datatable中有100行数据,需要判断在数据库中是否存在,这个时候我们就可以使用sqlserver中的[用户 定义表类型] 这里最最最重要的思路是把[ ...

  3. SQL 用户定义表类型,在存储过程里使用数据类型作參数

    在数据库编程里使用数据类型,能够提高代码的重用性.它们常常被使用在方法和存储过程中.使用数据类型,我们能够避免在存储过程里定义一串的參数,让人眼花缭乱,它就相当于面向对象语言里.向一个方法里传入一个对 ...

  4. SQL 用户定义表类型,在存储过程里使用表类型,表参数作参数

    .定义表类型SUTDENTTYPE,包含三个字段,分别对应学生表的NAME,SEX和PHONE.之所以如此创建,我是准备在插入新学生数据的存储过程中,以它为参数.   GO CREATE TYPE S ...

  5. SQL Server 2019 中标量用户定义函数性能的改进

    在SQL Server中,我们通常使用用户定义的函数来编写SQL查询.UDF接受参数并将结果作为输出返回.我们可以在编程代码中使用这些UDF,并且可以快速编写查询.我们可以独立于任何其他编程代码来修改 ...

  6. SQL Server中授予用户查看对象定义的权限

    SQL Server中授予用户查看对象定义的权限   在SQL Server中,有时候需要给一些登录名(用户)授予查看所有或部分对象(存储过程.函数.视图.表)的定义权限存.如果是部分存储过程.函数. ...

  7. 把sql server 2000的用户表的所有者改成dbo

    怎么样把sql server 2000的用户表的所有者,改成dbo,而不是用户名. 推荐使用下面介绍的第二种方法,执行以下查询便可以了.sp_configure 'allow updates','1' ...

  8. SQL SERVER技术内幕之5 表表达式

    表表达式是一种命名的查询表达式,代表一个有效的关系表.可以像其他表一样,在数据处理语句中使用表表达式.SQL Server支持4种类型的表表达式:派生表(derived table).公用表表达式(C ...

  9. SQL Server数据类型与SDE库表sde_type对照表

    SDE_column_registry 表管理所有注册列. 警告:如果使用 SQL 界面更改列定义,SDE_column_registry 表中的记录将不会更新.这可能导致之后的任何数据导出失败. S ...

随机推荐

  1. Hadoop InputFormat浅析

    本文转载:http://hi.baidu.com/_kouu/item/dc8d727b530f40346dc37cd1 在执行一个Job的时候,Hadoop会将输入数据划分成N个Split,然后启动 ...

  2. ubuntu glusterfs 配置调试

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAqMAAADpCAIAAACfoakcAAAgAElEQVR4nO2d2XMjSX7f8c+sQ4GwHY

  3. zepto下动画返回顶部

     function scroll(scrollTo, time) {                var scrollFrom = parseInt(document.body.scrollTop) ...

  4. Android ArrayAdpater 填充集合

    在这里我们新创建一个任务来演示 然后再布局文件中定义一个ListView 来当作显示数据的容器,布局文件代码如下: <LinearLayout xmlns:android="http: ...

  5. Oracle Outline总结

    一.基本概述 Oracle Outline,中文也称为存储大纲,是最早的基于提示来控制SQL运行计划的机制.也是9i以及之前版本号唯一能够用来稳定和控制SQL运行计划的工具. outline是一个hi ...

  6. [Webpack 2] Optimize React size and performance with Webpack production plugins

    You can fine tune several webpack plugins to make your bundle as small as it can be for your specifi ...

  7. iOS之核心动画(Core Animation)

      Core Animation,中文翻译为核心动画,它是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍.也就是说,使用少量的代码就可以实现非常强大的功能. Core ...

  8. Vivado学习笔记_002

    经过几天的试用逐渐熟悉了vivado,和ISE相比vivado确实有了很多改良. 发现了以下几个特点:   1.数据格式统一了 在以往的设计中,保存数据的格式非常多.ISE有很多种格式的文件,在tra ...

  9. SQL 收缩数据库文件大小

    USE WebExam; GO ALTER DATABASE WebExam SET RECOVERY SIMPLE; GO -- 收缩文件到 1 MB. ); GO ALTER DATABASE W ...

  10. 动态添加组件(XML)

    1.利用LayoutInflater的inflate动态加载XMLmLinearLayout = (LinearLayout)findViewById(R.id.LinearLayout_ID);La ...