更新查询来自数据表的where子句值

时间:2014-06-24 18:14:56

标签: c# .net tsql system.data.datatable

我有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

2 个答案:

答案 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)

您需要Table-Valued Parameter

本文也会有所帮助:

  

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 )