这在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 |
+---------+
如果我们删除案例陈述,那么
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 |
+--------+
答案 0 :(得分:4)
完全没有。当SQL Server将字符串连接到NULL
值时,值为NULL
。
如果先将值设置为空字符串,则两者都将返回相同的值:
DECLARE @liststr VARCHAR(MAX);
SET @liststr = '';
两个注释:
union all
而不是union
,除非您明确要承担删除重复项的开销。order by
。请注意,Erland Sommarskog表示不支持这种组合字符串的方法。虽然他建议在这个特定的答案中使用光标,但我会使用XML。
答案 1 :(得分:2)
您可以使用SQL Server的scope: {}
功能:
CONCAT
因此,如果CONCAT中的一个参数为NULL,则它将替换为空字符串。