以下查询有效:
Declare @Product varchar(max) = '0022'
select *
from Prod
where ProdId in (@Product)
以下也有效:
select *
from Prod
where ProdId in (0022,0033)
但下面的内容不起作用:
Declare @Product varchar(max) = '0022,0033'
select *
from Prod
where ProdId in (@Product)
我做错了什么?我该如何解决?
答案 0 :(得分:1)
你不能直接这样做,但有一个解决方法。 Michelle Ufford在SQLFool上有一篇关于名为“dba_parseString_udf”的函数的优秀文章,它可以满足您的需求。
奇怪的是,在使用多选列表时,您可以在SSRS中嵌入的SQL语句中执行此操作(例如,将逗号分隔的字符串传递给IN子句)。
答案 1 :(得分:0)
如果您的代码全部为4位数,则可以使用 CHARINDEX 来检查字符串中的代码。
SELECT *
FROM Prod
WHERE CHARINDEX(ProdId, @Product) > 0
如果代码长度不同,请在@Product之前和之后添加逗号,以便在搜索 123 时不会出现 12345 。
SET @Product = ',' + @Product + ','
SELECT *
FROM Prod
WHERE CHARINDEX(',' + ProdId + ',' , @Product) > 0
更正确的方法是创建临时表并插入值:
SELECT CAST('0022' AS VARCHAR(20)) AS CODE
UNION
SELECT CAST('0033' AS VARCHAR(20)) AS CODE
INTO #TEMP_CODES
SELECT *
FROM Prod
WHERE ProdId IN (SELECT CODE FROM #TEMP_CODES)