将多个值插入IN条件

时间:2015-10-07 19:32:04

标签: c# sql sql-server

我需要将参数插入到特定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量参数并设置每个参数吗?

1 个答案:

答案 0 :(得分:0)

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

然后你需要将它连接到你的动态sql字符串,如下所示:

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