在IN条件中插入多个值
本文关键字:插入 IN 条件 | 更新日期: 2023-09-27 18:16:35
我需要为特定SQL语句的IN条件插入一个参数。该参数的实际值是一个由命令分隔的ID列表,可以是1个ID或多个ID。
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数量的参数,并设置每一个?
即使ListID
是int
类型,您也需要为@ids
变量/参数使用varchar
,以允许它包含逗号分隔的字符串。
然后你需要将它连接到你的动态sql字符串,像这样:
' ... WHERE ListID IN (' + @ids + ') ...'