一个用户自定义表类型不允许用来定义表的列类型,也不能用来定义一个用户自定义结构类型的字段。 不允许在一个用户自定义表类型上创建一个非聚合索引,除非这个索引是基于此用户自定义表类型创建的主键或唯一约束。 在用户自定义表类型的定义中,不能指定缺省值。 一旦创建后,就不允许再对用户自定义表类型的定义进行修改。 用户自定义函数不能以用户定义表类型中的计算列定义为参数来调用。 一个用户自定义表类型不允许作为表值型参数来调用用户自定义函数。
不允许更新多行表值型参数中的列值,也不允许插入或删除行。如果想要修改那些已经传入到存储过程或参数化语句中的表值型参数中的数据,只能通过向临时表或表变量中插入数据来实现。
使用一连串的独立参数来表示多列和多行数据的值。使用这一方法,可以被传递的数据总量受限于可用参数的个数。SQL Server的存储过程最多可以使用2100个参数。在这种方法中,服务端逻辑必须将这些独立的值组合到表变量中,或是临时表中进行处理。 将多个数据值捆绑到带限定符的字符串或是XML文档中,然后再将文本值传递到一个存储过程或语句中。这种方式要求存储过程或语句中要有必要的数据结构验证和数据松绑的逻辑。 为多行数据的修改创建一系列独立的SQL语句,就像在一个SqlDataAdapter中调用Update方法时产生的那些一样,这些更新可以被独立地或是分组成批地提交到服务器。不过,尽管成批提交中含有多重语句,但这些语句在服务端都是被分开独立执行的。 使用bcp实用程序或是使用SqlBulkCopy对象将多行数据载入一个表中,尽管这一技术效率很高,但它并不支持在服务端执行,除非数据是被载入到临时表或是表变量中。
查看英文原文:Table-Valued Parameters in SQL Server
作者 Al Tenhundfeld译者 张海龙 来源:infoq