2

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

4

2 回答 2

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 之间。IE

lstOfIDs += "'"+drow["IdColumnHere"].ToString()+"',";

这应该给你类似'abc','def','anything'的东西

于 2014-06-24T18:27:06.563 回答
1

您需要一个表值参数

本文也将有所帮助:

http://www.brentozar.com/archive/2014/02/using-sql-servers-table-valued-parameters/

如果您的列多于CodeC# 数据表中的列,则可能还需要一个投影(在 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 )
于 2014-06-24T18:22:32.363 回答