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. JSON ,JSONArray和JSONObject

    和 XML 一样,JSON 也是基于纯文本的数据格式.由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,可以用 JSON 传输一个简单的 String,Num ...

  2. [置顶] 项目进阶 之 持续构建环境搭建(二)Nexus私服器

    上一篇博文项目进阶 之 持续构建环境搭建(一)架构中,我们大致讲解了一下本系列所搭建环境的基本框架,这次开始我们进入真正的环境搭建实战.重点不在于搭建的环境是否成功和完善,而是在搭建过程中充分认识到每 ...

  3. kali linux 之 DNS信息收集

    [dig]命令的使用: dig是linux中的域名解析工具,功能比nslookup强很多,使用也很方便. windows系统下使用dig须下载安装一下. 使用方法: root@kali:~# dig ...

  4. 【转】Sqlserver通过链接服务器访问Oracle的那些事儿!

    原文:http://blog.sina.com.cn/s/blog_614b6f210100t80r.html 前言:1.不经历风雨,怎能见彩虹.2.充分利用BaiDu.google等搜索引擎查找资料 ...

  5. NSMakeRange基础函数应用

    NSRange NSMakeRange ( NSUInteger loc, NSUInteger len ); 这是官方得接口描述.loc 为location缩写,len 表示长度.作用:在loc指定 ...

  6. Ubuntu jdk报Picked up JAVA_TOOL_OPTIONS信息解决

    下面是摘自http://www.cnblogs.com/coderbean/p/4522182.html 以下是我在网上找了好久找到的: Ubuntu jdk报Picked up JAVA_TOOL_ ...

  7. PERCONA-TOOLKIT : pt-ioprofile分析IO情况

    针对IO密集型应用做系统调优的时候,我们通常都需要知道系统cpu  内存  io 网络等系统性能 和 使用率,结合应用本身的访问量,以及 mysql的性能指标来综合分析.比如说:我们将系统压力情况分为 ...

  8. 聊聊动画引擎 pop

    iOS可以通过CADisplayLink实现自定义动画引擎,pop就是基于此实现的,而且比原生Core Animation更强大好用.譬如当ViewController侧滑返回的时候,系统会将Core ...

  9. 关于Bufferedreader的功能扩写

    package cn.hncu.pattern.decorator.v1; import java.io.FileReader;import java.io.IOException; public c ...

  10. JNI 学习笔记系列(一)

    JNI全称是Java native interface,它是一个中间件,通过JNI可以使Java和C语言之间互相调用,在android开发中,像wifi热点的开启,像极品飞车中重力加速,碰撞效果的模拟 ...