【发布时间】:2011-09-25 14:04:15
【问题描述】:
我喜欢找到一种方法来处理对 sql db 的多次更新(一次 db 往返)。我阅读了 SQL Server 2008 http://www.codeproject.com/KB/database/TableValueParameters.aspx 中的表值参数,这似乎非常有用。但似乎我需要创建一个存储过程和一个表类型来使用它。真的吗?也许是因为安全?我想像这样运行文本查询:
var sql = "INSERT INTO Note (UserId, note) SELECT * FROM @myDataTable";
var myDataTable = ... some System.Data.DataTable ...
var cmd = new System.Data.SqlClient.SqlCommand(sql, conn);
var param = cmd.Parameters.Add("@myDataTable", System.Data.SqlDbType.Structured);
param.Value=myDataTable;
cmd.ExecuteNonQuery();
所以
A) 我是否必须同时创建存储过程和表类型才能使用 TVP?和
B) 推荐什么替代方法向 SQL Server 发送多个更新(和插入)?
【问题讨论】:
-
A) 是的。 B) 替代方案:XML、[n]varchar(size) 字符串 + 解析。我的选择是 TVP。
-
好的,也谢谢你:)
-
这在什么时候不值得为避免几次访问数据库而付出努力?
-
Jeff - 我想知道它的成本是多少(另一个问题?)。目前,这是一种预感 + 更重要的是一种似乎已被普遍接受的做法,来自 MS P&P “往返会显着影响性能。它们受网络延迟和下游服务器延迟的影响。许多数据驱动的网站大量访问数据库“ msdn.microsoft.com/en-us/library/ff647768.aspx
标签: c# .net sql-server sql-server-2008 table-valued-parameters