我有这个query
:
UPDATE A
Set A.NUM = B.NUM
FROM A
JOIN B on A.ID = B.ID
where A.Code in ()
A.Code
值来自 a datatable
。我该如何喂这个query
?
我有这个query
:
UPDATE A
Set A.NUM = B.NUM
FROM A
JOIN B on A.ID = B.ID
where A.Code in ()
A.Code
值来自 a datatable
。我该如何喂这个query
?
为什么不编写代码来使用数据表制作逗号分隔的 ID 字符串?
string lstOfIDs = string.Empty;
DataTable dt = new DataTable();
foreach (DataRow drow in dt.Rows)
{
lstOfIDs += drow["IdColumnHere"].ToString()+",";
}
lstOfIDs.TrimEnd(',');
然后,您可以在 IN 子句中传递 lstOfIds。
编辑1:
我认为A.Code In ()
是检查代码而不是 ID。我希望您将代码放在 lstOfIDs 中。另外,我建议将 ' 放在 ID 之间。IE
lstOfIDs += "'"+drow["IdColumnHere"].ToString()+"',";
这应该给你类似'abc','def','anything'的东西
您需要一个表值参数。
本文也将有所帮助:
http://www.brentozar.com/archive/2014/02/using-sql-servers-table-valued-parameters/
如果您的列多于Code
C# 数据表中的列,则可能还需要一个投影(在 sql 内)获取与该IN()
子句一起使用的输出。像这样的东西:
UPDATE A
Set A.NUM = B.NUM
FROM A
JOIN B on A.ID = B.ID
where A.Code in ( SELECT Code FROM @tvpCodes )