我有query
:
UPDATE A
Set A.NUM = B.NUM
FROM A
JOIN B on A.ID = B.ID
where A.Code in ()
A.Code
值来自datatable
。如何加入此query
?
答案 0 :(得分:2)
为什么不编写代码来使用数据表生成逗号分隔的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之间。即
lstOfIDs += "'"+drow["IdColumnHere"].ToString()+"',";
这应该会给你一些类似于' abc'' def''''
答案 1 :(得分:1)
本文也会有所帮助:
http://www.brentozar.com/archive/2014/02/using-sql-servers-table-valued-parameters/
如果C#Datatable中的列数多于Code
,则可能还需要一个投影(在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 )