如何在SQL IN子句中使用计算表达式

时间:2018-04-16 01:33:06

标签: sql-server tsql in-clause

我有一个应用程序,它在SQL查询的“IN”子句中使用逗号分隔的字符串来表示多个ID。

    SELECT * FROM TABLE WHERE [TABLENAME].[COLUMNNAME] 
    IN 
    ((SELECT '''' + REPLACE('PARAM(0, Enter ID/IDS. Separate multiple ids by 
    comma., String)', char(44), ''',''') + ''''))

我测试过PARAM获取了输入的字符串,例如'ID1,ID2'但SELECT / REPLACE不执行。声明成了,

    SELECT * FROM TABLE WHERE [TABLENAME].[COLUMNNAME] 
    IN 
    ((SELECT '''' + REPLACE('ID1,ID2', char(44), ''',''') + ''''))

我想要实现,

    SELECT * FROM TABLE WHERE [TABLENAME].[COLUMNNAME] 
    IN ('ID1', 'ID2')

查询不会返回任何结果/错误。我相信相应的记录在我正在使用的数据库中。不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

你不能这样做。 IN运算符需要一个以逗号分隔的参数列表,但是为它提供了一个恰好包含逗号分隔字符串的参数:

如果您正在使用SQL Server 2016或更高版本,则可以使用内置的string_split将分隔的字符串转换为表格。

SELECT * 
FROM TABLE 
WHERE [TABLENAME].[COLUMNNAME] 
IN STRING_SPLIT(@CommaDelimitedString, ',')

对于旧版本,您可以选择多种用户定义的功能,我个人最喜欢的是Jeff Moden的DelimitedSplit8K。有关更多选项,请阅读Aaron Bertrand的Split strings the right way – or the next best way.