这在 SQL 中如何实现?
DECLARE @liststr VARCHAR(MAX)
;WITH COMMA (name)
AS
(
SELECT 'a'
UNION
SELECT 'b'
UNION
SELECT 'c'
UNION
SELECT 'd'
)
SELECT @liststr = CASE WHEN @liststr+',' IS NULL THEN '' ELSE @liststr+',' END + name
FROM comma
SELECT @liststr as Result
以上查询返回以下结果
+---------+
| Result |
+---------+
| a,b,c,d |
+---------+
如果我们删除 case 语句。
DECLARE @liststr VARCHAR(MAX)
;WITH COMMA (name)
AS
(
SELECT 'a'
UNION
SELECT 'b'
UNION
SELECT 'c'
UNION
SELECT 'd'
)
SELECT @liststr = @liststr+',' + name FROM comma
SELECT @liststr as Result
结果是
+--------+
| Result |
+--------+
| NULL |
+--------+
最佳答案
完全没有。当 SQL Server 将字符串连接到 NULL
值时,该值为 NULL
。
如果您先将值设置为空字符串,那么两者将返回相同的值:
DECLARE @liststr VARCHAR(MAX);
SET @liststr = '';
两个注意事项:
- 使用
union all
而不是union
,除非您明确希望承担删除重复项的开销。 - 运行查询时,结果的顺序是任意的。如果您想要特定的订单,请使用
order by
。
请注意 Erland Sommarskog表示不支持这种组合字符串的方法。虽然他建议在这个特定答案中使用游标,但我会使用 XML。
关于sql - 连接声明的列并定义它时,sql如何返回所有行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33281664/