1. Sql2008 使用TVP批量插入数据 - BarneyZhang - 博客园
http://www.cnblogs.com/zhxhdean/archive/2013/07/28/3220732.html2. 优点
表值参数具有更高的灵活性,在某些情况下,可比临时表或其他传递参数列表的方法提供更好的性能。表值参数具有以下优势:
(1)首次从客户端填充数据时,不获取锁。
(2)提供简单的编程模型。
(3)允许在单个例程中包括复杂的业务逻辑。
(4)减少到服务器的往返。
(5)可以具有不同基数的表结构。
(6)是强类型。
(7)使客户端可以指定排序顺序和唯一键。
3. 限制
表值参数有下面的限制:(1) SQL Server 不维护表值参数列的统计信息。
(2) 表值参数必须作为输入 READONLY 参数传递到 Transact-SQL 例程。
不能在例程体中对表值参数执行诸如 UPDATE、DELETE 或 INSERT 这样的 DML 操作。 ***如果想要修改那些已经传入到存储过程或参数化语句中的表值型参数中的数据,只能通过向临时表或表变量中插入数据来实现。
(3) 不能将表值参数用作 SELECT INTO 或 INSERT EXEC 语句的目标。
表值参数可以在 SELECT INTO 的 FROM 子句中,也可以在 INSERT EXEC 字符串或存储过程中。
4. 性能
自己写代码实验了一下TVP跟普通SP的效率,发现确实性能提升很大。
插入10000条数据,TVP只用了0.421s,而普通SP则用了77s,不是一个数量级呀
注意:表值参数增加列时,代码中传入的dataTable的构建也要做相应的修改,列数必须保持完全一致,否则会报错。