从数据表中更新查询's where子句值

本文关键字:where 子句 数据表 更新 查询 | 更新日期: 2023-09-27 18:10:18

我有这个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 ?

从数据表中更新查询's where子句值

为什么不写一个代码,使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 )