Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 运算符中的多Varchar值_Sql_Sql Server_Sql Server 2008 R2 - Fatal编程技术网

Sql 运算符中的多Varchar值

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

我试图在存储过程中使用多值字符串,但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 * 
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”仅返回关于第一个“红色”的信息(而不是返回所有值)。很难解决这个问题:\