Sql 运算符中的多Varchar值
我试图在存储过程中使用多值字符串,但in运算符仅在硬编码模式下接受值 比如,如果我直接在代码中写入值,那么它可以工作,但是如果从SELECT命令中检索到值,那么它不会返回任何结果 有人能帮忙吗 对于测试:Sql 运算符中的多Varchar值,sql,sql-server,sql-server-2008-r2,Sql,Sql Server,Sql Server 2008 R2,我试图在存储过程中使用多值字符串,但in运算符仅在硬编码模式下接受值 比如,如果我直接在代码中写入值,那么它可以工作,但是如果从SELECT命令中检索到值,那么它不会返回任何结果 有人能帮忙吗 对于测试: DECLARE @AUX nvarchar(255); SET @AUX = (SELECT GROUP FROM FRUITS WHERE FRUIT = 'APPLES'); PRINT @AUX; SELECT * FROM FRUITS WHERE FRUIT IN (@AU
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 *
FROM FRUITS
WHERE FRUIT IN ('Red', 'Green', 'Starkling');
这很有效
我试图输出变量@AUX中的值,结果是正确的。。。那么为什么IN不读取这些值呢
TIA为什么不跳过变量赋值,只需执行以下操作:
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');
或者可能:
SELECT *
FROM FRUITS
WHERE FRUIT IN (SELECT FRUIT FROM FRUITS WHERE GROUP = 'APPLES');
如果组
字段包含单引号值的字符串列表。。。然后,您必须执行某种动态sql来将该字符串插入查询中。目前,它正在寻找一种叫做“红色”、“绿色”、“Starkling”的水果,而不是清单上的其中一种
要执行动态sql,它将如下所示:
exec(
'
SELECT *
FROM FRUITS
WHERE FRUIT IN (' + @AUX + ');'
)
如果在SELECT中只有一个值,如“Red”,该函数将工作。。。只有使用诸如“红色”、“绿色”等多值时,它才不起作用。您的查询没有意义。您从FRUITS表中选择GROUP,然后使用GROUP的值作为FRUITS字段的参数。您假设您的代码get已转换为,其中FRUIT IN('Red','Green','Starkling')
,但这是错误的@AUX是单个字符串。实际上,数据库引擎看到的是水果在哪里('Red','Green','Starkling')
。它不会将它们视为3个不同字符串的单独值。它将其视为一个字符串的一个值,该字符串恰好包含逗号和单引号!谢谢,我会试着读一下!是的,我试过直接在IN中使用SELECT,但它不起作用。。。除非我硬编码这些值。但是如果SELECT只返回一个值,那么它可以工作,不能只对多个值工作,无法理解为什么…:sThkx!但它只返回组中第一个值的值。例如:如果内部AUX为“红色”,“绿色”,“Starkling”仅返回关于第一个“红色”的信息(而不是返回所有值)。很难解决这个问题:\