我想了解这里发生了什么(这个问题的答案之一:Concatenate many rows into a single text string?):
DECLARE @Names VARCHAR(8000)
SELECT @Names = COALESCE(@Names + ', ', '') + Name
FROM People
所以我有一个模范表'测试'数据:
Col1
----
abc
xyz
现在我执行:
DECLARE @Concatenation VARCHAR(8000)
SELECT @Concatenation = COALESCE(@Concatenation + ', ', '') + Col1 FROM test
Select @Concatenation
结果我得到了一个结果abc, xyz
如果我执行:
DECLARE @Concatenation VARCHAR(8000)
SELECT @Concatenation = Col1 FROM test
Select @Concatenation
我得到一个结果xyz
问题是为什么像select @variable = @variable + column
这样的作业导致@variable
遍历整个列?如果我像select @variable = column
这样做,那么该列的记录会被返回?随机?
答案 0 :(得分:0)
这是你应该做的事情:
SELECT STUFF(( SELECT ',' + name
FROM People
FOR
XML PATH('')
), 1, 1, '')
你问题中的第一个例子是黑客攻击并且偶然起作用。请参阅以下主题:
https://connect.microsoft.com/SQLServer/Feedback/Details/383641
nvarchar concatenation / index / nvarchar(max) inexplicable behavior
第二个可能会返回任何值,因为您没有指定顺序。