在SQL Server 2008中处理来自c#的多个数据库更新

本文关键字:更新 数据库 Server SQL 2008 处理 | 更新日期: 2023-09-27 18:09:40

我喜欢找到一种方法来处理多个更新到一个sql数据库(与一个单一的数据库往返)。我读了关于表值参数在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?

在SQL Server 2008中处理来自c#的多个数据库更新

是的,您需要创建类型。

备选方案是发送大字符串sql批处理或将XML传递给进程。

大sql字符串批处理的缺点是它可能会破坏sql进程缓存,并可能导致sql重新编译-特别是如果批处理是唯一的,因为输入数据是大字符串的一部分。根据定义,每个批都是唯一的。

XML是tvp之前的主要选择。XML的一个缺点是,至少有一段时间,sql azure不支持它(这可能会改变?)所以它限制了你的选择。

电视节目似乎是这样做的方式。我们的项目刚刚转换为使用tvp。

希望对你有帮助。