我试图了解这里发生了什么(这个问题的答案之一: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那样做,将返回列中的哪个记录?随机?
发布于 2016-05-17 13:45:32
相反,你应该这样做:
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
第二个值可能会返回任何值,因为您没有指定顺序。
https://stackoverflow.com/questions/37277819
复制相似问题