首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多行赋值给非表变量

将多行赋值给非表变量
EN

Stack Overflow用户
提问于 2016-05-17 13:38:43
回答 1查看 29关注 0票数 0

我试图了解这里发生了什么(这个问题的答案之一:Concatenate many rows into a single text string?):

代码语言:javascript
复制
DECLARE @Names VARCHAR(8000) 
SELECT @Names = COALESCE(@Names + ', ', '') + Name 
FROM People

因此,我有一个典型的表格‘测试’与数据:

代码语言:javascript
复制
Col1
----
abc
xyz

现在我执行:

代码语言:javascript
复制
DECLARE @Concatenation VARCHAR(8000) 
SELECT @Concatenation = COALESCE(@Concatenation + ', ', '') + Col1 FROM test
Select @Concatenation

因此,我只有一个结果abc, xyz

如果我执行:

代码语言:javascript
复制
DECLARE @Concatenation VARCHAR(8000) 
SELECT @Concatenation = Col1 FROM test
Select @Concatenation

我只得到一个结果xyz

问题是为什么像select @variable = @variable + column这样的赋值会导致@variable迭代整个列?如果我像select @variable = column那样做,将返回列中的哪个记录?随机?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-17 13:45:32

相反,你应该这样做:

代码语言:javascript
复制
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

第二个值可能会返回任何值,因为您没有指定顺序。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37277819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档