Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.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中声明多值变量_Sql_Sql Server 2008 - Fatal编程技术网

在SQL中声明多值变量

在SQL中声明多值变量,sql,sql-server-2008,Sql,Sql Server 2008,在设置RECEIPTIDS变量时,我想写一个IN语句,这样我就可以将该格式的多个值传递到查询中。我尝试了以下方法: DECLARE @RECEIPTIDS VARCHAR(2000) SET @RECEIPTIDS = ('R00013','R00028') 但是,我得到了一个错误: “,”附近的语法不正确 你需要或者说 你可以把它用在 where field IN (Select val from @RECEIPTIDS) 你需要或者说 你可以把它用在 where field IN (Se

在设置
RECEIPTIDS
变量时,我想写一个IN语句,这样我就可以将该格式的多个值传递到查询中。我尝试了以下方法:

DECLARE @RECEIPTIDS VARCHAR(2000)
SET @RECEIPTIDS = ('R00013','R00028')
但是,我得到了一个错误:

“,”附近的语法不正确

你需要或者说

你可以把它用在

where field IN (Select val from @RECEIPTIDS)
你需要或者说

你可以把它用在

where field IN (Select val from @RECEIPTIDS)

使用临时数组或临时列表

DECLARE @ListofIDs TABLE(IDs VARCHAR(100))
INSERT INTO @ListofIDs VALUES('a'),('10'),('20'),('c'),('30'),('d')
SELECT IDs FROM @ListofIDs;

使用临时数组或临时列表

DECLARE @ListofIDs TABLE(IDs VARCHAR(100))
INSERT INTO @ListofIDs VALUES('a'),('10'),('20'),('c'),('30'),('d')
SELECT IDs FROM @ListofIDs;

你需要额外的单间

    create table MyTable
    (
       ID varchar(50) 
    )
    insert into MyTable values('R00013')
    insert into MyTable values('R00028')
    insert into MyTable values('R00015')

    DECLARE @RECEIPTIDS VARCHAR(2000)
    SET @RECEIPTIDS = ('''R00013'',''R00028''')
    DECLARE @QUERY VARCHAR(100)

    SET @QUERY='SELECT * 
    from MyTable 
    where ID IN ('+@RECEIPTIDS+')'
    EXEC (@QUERY)

编辑:与动态查询一起使用。

您需要额外的单个QOUTE

    create table MyTable
    (
       ID varchar(50) 
    )
    insert into MyTable values('R00013')
    insert into MyTable values('R00028')
    insert into MyTable values('R00015')

    DECLARE @RECEIPTIDS VARCHAR(2000)
    SET @RECEIPTIDS = ('''R00013'',''R00028''')
    DECLARE @QUERY VARCHAR(100)

    SET @QUERY='SELECT * 
    from MyTable 
    where ID IN ('+@RECEIPTIDS+')'
    EXEC (@QUERY)

已编辑:将其与动态查询一起使用。

对我也不起作用,但它确实:

DECLARE @RECEIPTIDS TABLE(val VARCHAR(100))
Insert into @RECEIPTIDS values ('R00013'), ('R00028')

where field IN (Select val from @RECEIPTIDS)

对我来说也不起作用,但这确实起了作用:

DECLARE @RECEIPTIDS TABLE(val VARCHAR(100))
Insert into @RECEIPTIDS values ('R00013'), ('R00028')

where field IN (Select val from @RECEIPTIDS)

这并不能回答问题,因为这会导致一个变量包含一个
单个值
,而OP询问的是一个变量中的多个值,您需要使用函数将该字符串拆分为一个值序列,以提供完整的example@DrCopyPaste更新了答案,OP可以和动态queryNice one一起使用!如果有人想在网上试一试的话,这里还有一把小提琴。这并不能回答问题,因为这会导致一个变量包含一个
单个值
,而OP询问的是一个变量中的多个值,您需要使用函数将该字符串拆分为一个值序列,以提供完整的example@DrCopyPaste更新了答案,OP可以和动态queryNice one一起使用!如果有人想在网上试一试的话,这里还有一把小提琴。我得到以下信息:
必须声明标量变量
我能够成功执行它。我怀疑某处有打字错误。不,我不能执行。我用方括号括住了变量,但仍然没有幸运地首先执行上面的示例。如果它没有执行,则我怀疑SQL server版本问题。我得到以下信息:
必须声明标量变量
我能够成功执行它。我怀疑某处有打字错误。不,我不能执行。我用方括号括住了变量,但仍然没有幸运地首先执行上面的示例。如果未执行,则我怀疑SQL server版本问题。我收到以下错误:
必须声明标量变量
我收到以下错误:
必须声明标量变量