Table-valuesparameter(TVP)系列之一:在T-SQL中创建和使用TVP一
摘要表值参数(Table-valuedparameters)简称TVP,是SQLServer2008中引入的一种新特性,它提供了一种内置的方式,让客户端应用可以只通过单独的一条参化数SQL语句,就可以向SQLServer发送多行数据
简介在表值参数出现以前,当需要发送多行数据到SQLServer,我们只能使用一些替代方案来实现:(1)使用一连串的独立参数来表示多列和多行数据的值
使用这一方法,可以被传递的数据总量受限于可用参数的个数
SQLServer的存储过程最多可以使用2100个参数
在这种方法中,服务端逻辑必须将这些独立的值组合到表变量中,或是临时表中进行处理
(2)将多个数据值捆绑到带限定符的字符串或是XML文档中,然后再将文本值传递到一个存储过程或语句中
这种方式要求存储过程或语句中要有必要的数据结构验证和数据松绑的逻辑
(3)为多行数据的修改创建一系列独立的SQL语句
就像在一个SqlDataAdapter中调用Update方法时产生的那些一样,这些更新可以被独立地或是分组成批地提交到服务器
不过,尽管成批提交中含有多重语句,但这些语句在服务端都是被分开独立执行的
(4)使用bcp实用程序或是使用SqlBulkCopy对象将多行数据载入一个表中
尽管这一技术效率很高,但它并不支持在服务端执行(注:多行数据仍然无法一次性传给存储过程),除非数据是被载入到临时表或是表变量中
SQLServer2008中的T-SQL功能新增了表值参数
利用这个新增特性,我们可以很方便地通过T-SQL语句,或者通过一个应用程序,将一个表作为参数传给函数或存储过程
(1)表值参数表示你可以把一个表类型作为参数传递到函数或存储过程里
(2)表值参数的功能可以允许你向被声明为T-SQL变量的表