我有这个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
?
为什么不写一个代码,使ID的使用datatable逗号分隔字符串?
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。我希望您在列表ofid中放置代码。另外,我建议在Id之间加上"Id"。例如
lstOfIDs += "'"+drow["IdColumnHere"].ToString()+"',";
这应该会给你类似'abc','def','anything'的东西
你想要一个表值参数
这篇文章也会有所帮助:
http://www.brentozar.com/archive/2014/02/using-sql-servers-table-valued-parameters/
如果你在c#数据表中有比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 )