我需要将参数插入到特定SQL语句的IN条件中。参数的实际值是命令分隔的ID列表,其可以是1个ID或多个ID。这是SQL;
CommandText = @";WITH CTE(ListID, ParentID) AS
(
SELECT ListID, ParentID FROM dvw.DistributionList WHERE ListID IN (@ids)
UNION ALL
SELECT dl.ListID, dl.ParentID FROM CTE AS c INNER JOIN dvw.DistributionList as dl
ON dl.ListID = c.parentID
)
SELECT DISTINCT Email FROM tiger_dev.dvw.Subscriptions AS sub INNER JOIN dvw.Users AS u
ON sub.UserName = u.UserName WHERE u.ActiveUser = 1 and sub.ListID IN
(
SELECT ListID FROM CTE
)
ORDER BY Email"
问题在于,ListID
列数据类型为int
。当我运行语句时,我遇到了一些冲突的数据类型问题。这是一个样本;
将nvarchar
值'4703,4724,4704,4705'
转换为数据类型int
时转换失败。
无论如何都不需要在SQL文本中创建可能的X量参数并设置每个参数吗?
答案 0 :(得分:0)
即使ListID
是int
类型,您也需要为varchar
变量/参数使用@ids
,以允许它包含以逗号分隔的字符串。
然后你需要将它连接到你的动态sql字符串,如下所示:
' ... WHERE ListID IN (' + @ids + ') ...'