我有一个应用程序,它在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')
查询不会返回任何结果/错误。我相信相应的记录在我正在使用的数据库中。不知道如何解决这个问题。
答案 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.