表值参数(Table-valued parameter)是SQL Server 2008的一个新特性,在以前的版本中,没有办法把表变量当作一个参数传递给存储过程。微软在SQL Server2008中引入了表值参数的特性,可以实现这项功能。
表值参数有两大优点:一是它不需要为初始的数据加锁,二是它不会导致语句重新编译。
表值参数的创建和使用包括以下步骤:
1) 创建表类型
2) 创建一个可将表类型作为参数来接受的存储过程或函数
3) 创建表变量并插入数据
4) 调用该存储过程和函数,并将表变量作为参数传递。
下面,我们来一步步分解这个创建和使用的过程。首先,我们用以下的DDL SQL语句来创建一个名为“TestDB”的测试数据库:
USE [master] |
接下来我们使用以下的DDL SQL语句来创建一个名为TestLocationTable的表:
然后,使用以下的DML SQL语句将数据添加到我们上面创建的表中:
|
下一步,我们要创建一个和TestLocationTable表具有相似表结构的表类型(TABLE TYPE),语句如下:
紧接着,我们要创建一个可以将表类型作为一个参数来接受的存储过程,使用的语句如下:
USE [TestDB] [usp_InsertProdLocation]') AND type in (N'P', N'PC')) |
这个存储过程将表变量作为导入值接收,并且只插入TestLocationTable中没有的数据。现在,我们可以尝试创建一个表变量,并执行上面创建的存储过程usp_InsertProdLocation,语句如下:
use TestDB |
这时候,我们可以使用以下的TSQL语句从表TestLocationTable查询所有的数据:
use TestDB |
查询结果如下所示:
Id, shortname, name |
从返回的结果,我们可以看到存储过程usp_InsertProdLocation 插入了表变量@TV中和表TestLocationTable所有不匹配的行。
我们还可以将表变量传递给一个函数。下面我们创建一个简单的函数,语句如下:
现在,我们通过创建一个表变量并将该变量作为一个参数传递给已创建的函数以调用该函数,语句如下:
USE [TestDB] |
执行结果如下:
(1 row(s) affected) |
注:上面所演示的脚本都是在SQL Server 2008 CTP6版本上进行编写并经过测试的。
- 相关阅读:
- ·SQL Server 2016公众预览版将今夏到来
//server.zol.com.cn/519/5197271.html - ·十大特性让企业升级到Server 2008 R2?
//server.zol.com.cn/172/1725066.html - ·步入云端:微软发布SQL Server 2014
//server.zol.com.cn/444/4444065.html - ·微软已为厂商提供SQL Server 2014 RTM
//server.zol.com.cn/441/4411892.html - ·如何避免在Windows Server 2012中使用GUI?
//server.zol.com.cn/403/4038847.html