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