我有这个问题:
s="update myTable set date='09/09/12' where crc32 in("+list+")";
但由于我的列表中有数千个值,我认为有更好的方法可以做到这一点。我不知道哪种方式或方式。
更新:列crc32
为int
。 list
的字符串如下:
list = "2345,-6467,7865,7654,...."
我用c#来执行查询。 list
包含我无法通过sql查询获取的值,只需通过我的代码。
由于
答案 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
。