在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数量的参数,并设置每一个?

在IN条件中插入多个值

即使ListIDint类型,您也需要为@ids变量/参数使用varchar,以允许它包含逗号分隔的字符串。

然后你需要将它连接到你的动态sql字符串,像这样:

' ... WHERE ListID IN (' + @ids + ') ...'