我正在尝试在Store Procedure中使用多值字符串,但IN运算符只接受硬编码模式中的值。
就像,如果我直接在代码中写入值,它会工作,但是如果从SELECT命令中检索到值,则它不会返回任何内容......
任何人都可以提供帮助吗?
进行测试:
DECLARE @AUX nvarchar(255);
SET @AUX = (SELECT GROUP FROM FRUITS WHERE FRUIT = 'APPLES');
PRINT @AUX;
SELECT *
FROM FRUITS
WHERE FRUIT IN (@AUX);
这不会返回任何内容。但是@AUX
中的值被检索,并包含'Red','Green','Starkling'
。
如果我使用Select
命令,它只能起作用。
如果我在IN值中核心,它也可以。
SELECT *
FROM FRUITS
WHERE FRUIT IN ('Red', 'Green', 'Starkling');
这很有效。
我试图在变量@AUX中输出值并且是正确的...那么为什么IN不读取值?
TIA
答案 0 :(得分:2)
如果Group
字段包含单引号值的字符串列表...那么您必须执行某种动态sql以将该字符串插入查询中。目前正在寻找一款名为“红色'红色'绿色' Starkling'"'''''''''而不是列表中的其中一个。
要做动态sql,它看起来像:
exec(
'
SELECT *
FROM FRUITS
WHERE FRUIT IN (' + @AUX + ');'
)
答案 1 :(得分:0)
为什么不跳过变量赋值并执行此操作:
@Before
对于它的价值,我会使用您在上面指定的列名称,但它们似乎不匹配(组值可能与水果值不匹配)。你真正想要的是:
SELECT *
FROM FRUITS
WHERE FRUIT IN (SELECT GROUP FROM FRUITS WHERE FRUIT = 'APPLES');
或者也许:
SELECT *
FROM FRUITS
WHERE GROUP IN (SELECT GROUP FROM FRUITS WHERE FRUIT = 'APPLES');