IN运算符中的多Varchar值

时间:2015-12-17 17:17:37

标签: sql sql-server sql-server-2008-r2

我正在尝试在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

2 个答案:

答案 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');