更新数千行

时间:2012-09-23 10:48:40

标签: c# sql

我有这个问题:

s="update myTable set date='09/09/12' where crc32 in("+list+")";

但由于我的列表中有数千个值,我认为有更好的方法可以做到这一点。我不知道哪种方式或方式。

更新:列crc32intlist的字符串如下:

list = "2345,-6467,7865,7654,...."

我用c#来执行查询。 list包含我无法通过sql查询获取的值,只需通过我的代码。

由于

2 个答案:

答案 0 :(得分:2)

检查表值参数。 http://msdn.microsoft.com/en-us/library/bb510489.aspx将其放在存储过程中,例如:

create procedure mysp
@tvp tvp_list readonly
as
 update mt
 set date='09/09/12'
 from mytable mt
 join @tvp t on tvp.id = crc32

使用包含crc32

的数据表参数从C#调用它
var cmd = new SqlCommand(CommandText = "prc_update",conn);

...

var dt = new DataTable();
dt.Columns.Add("crc32",typeof(string));
..... you can add more if you like
foreach(var item in myList)
{
  var row = dt.NewRow();
  row["crc32"] = item;
  dt.Rows.Add(row);
}

cmd.Parameters.Add("@tvp", System.Data.SqlDbType.Structured);
cmd.Parameters["@tvp"].Value = dt;

.....

conn.Open();
cmd.ExecuteNonQuery();

答案 1 :(得分:1)

数据库中有List吗?

由于UPDATE的{​​{1}}可能更快,创建表格,将JOIN放入其中,然后执行List可能会更快UPDATE