【问题标题】:Fetch multiple values and store in a single variable as comma separated values [duplicate]获取多个值并作为逗号分隔值存储在单个变量中[重复]
【发布时间】:2019-04-03 17:34:02
【问题描述】:

我正在尝试从表中获取多个值并将其作为逗号分隔值存储在单个变量中,以便我可以将该变量用作不同选择语句中的参数。

这是 SQL 查询:

DECLARE @AccCode VARCHAR(MAX)
SELECT @AccCode = AccCode FROM Account WHERE (*some condition*) --returns more than 1 value
SELECT * FROM AccountSet WHERE AccCode IN (@AccCode)  

问题是从第一个选择查询返回的所有值都没有存储在@AccCode 变量中。相反,只有第一个返回值被存储。

我不确定我是否遗漏了什么。任何帮助,将不胜感激。

提前谢谢..!!

【问题讨论】:

  • 即使更正第二条语句以将所有值存储为分隔字符串,第三条语句也不是有效选项。
  • @Luis 如果第二个语句以逗号分隔的字符串返回值,那么第三个语句应该返回结果对吗?如果第二个语句返回 '1,2,3' 作为结果,则第三个语句将是 'SELECT * FROM AccountSet WHERE AccCode IN ('1,'2','3')'。如果我错了,请纠正我..
  • 不,第三个语句是SELECT * FROM AccountSet WHERE AccCode IN ('1,2,3'),它是一个单一的值。要将分隔字符串用作值数组,您需要使用字符串拆分器或动态 sql 的错误选项。您还可以更改方法并使用表变量来存储值,而不是使用字符串变量。

标签: sql-server


【解决方案1】:

您可以使用FOR XML PATH() 子句:

SELECT @AccCode = STUFF( (SELECT ', '+ AccCode 
                          FROM Account 
                          WHERE (*some condition*) 
                          FOR XML PATH('')
                         ), 1, 1, ''
                       )

【讨论】:

  • 如何使用“单”引号中的值并用逗号分隔得到相同的结果?我试过这个,但我无法从最后一个位置删除逗号并保留第一个位置的单引号。 SELECT @AccCode = STUFF((SELECT ''''+ AccCode + '''' + ',' FROM Account WHERE (*some condition*) FOR XML PATH('')), 1, 1, '' ) 也许我可以找到返回语句的长度,然后将其用作 STUFF 的参数,但还有其他更简单的方法吗?
【解决方案2】:

您可以使用 COALESCE:

DECLARE @AccCode VARCHAR(MAX)
SELECT @AccCode = COALESCE(@AccCode + ',' + AccCode, AccCode) FROM Account WHERE (*some condition*) --returns more than 1 value
SELECT * FROM AccountSet WHERE AccCode IN (@AccCode)  

【讨论】:

    猜你喜欢
    • 2022-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多