1

我有这个查询:

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

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

更新:该列crc32int. list是字符串,如:

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

我通过 c# 执行查询。list包含我无法通过 sql 查询获取它们的值,仅通过我的代码。

谢谢

4

2 回答 2

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();
于 2012-09-23T10:54:52.057 回答
1

List在数据库的某个地方吗?

因为UPDATEwith aJOIN可能更快,所以创建一个表,放入List它,然后UPDATE用 a执行它甚至可能更快JOIN

于 2012-09-23T10:55:27.813 回答