表值参数有两个明显的优点:
1:不需要为初始的数据加锁。
2:它不会导致语句重新编译。
表值参数的创建和使用包括以下步骤:
(1) 创建表类型
(2) 创建一个可将表类型作为参数来接受的存储过程或函数
(3) 创建表变量并插入数据
(4) 调用该存储过程和函数,并将表变量作为参数传递。
下面,我们来一步步分解这个创建和使用的过程。首先,我们用以下的DDL SQL语句来创建一个名为“TestDB”的测试数据库:
|
下面,使用以下的DDL SQL语句来创建一个名为TestLocationTable的表:
|
然后,使用以下的DML SQL语句将数据添加到我们上面创建的表中:
|
下面,我们需要创建一个和TestLocationTable表具有相似表结构的表类型(TABLE TYPE),语句如下所示:
|
接下来,需要创建一个可以将表类型作为一个参数来接受的存储过程,使用的语句如下:
|
此存储过程将表变量作为导入值接收,并且只插入TestLocationTable中没有的数据。现在,大家可以尝试创建一个表变量,并执行上面创建的存储过程usp_InsertProdLocation,语句如下所示:
|
此时,可以使用以下的TSQL语句从表TestLocationTable查询所有的数据:
|
查询的结果:
|
从返回的结果看,存储过程usp_InsertProdLocation 插入了表变量@TV中和表TestLocationTable所有不匹配的行。
另外,我们还可以将表变量传递给一个函数。下面创建一个简单的函数,语句如下所示:
|
现在,大家可以通过创建一个表变量并将该变量作为一个参数传递给已创建的函数以调用该函数,该语句如下所示:
|
执行的结果:
|
注释:上文中的参考脚本已在SQL Server 2008 CTP6版本上进行编写并已经测试成功。
新闻热点
疑难解答