如何在TSQL select语句中声明和使用变量会产生不同的结果

问题描述 投票:0回答:1

我想获得一个用逗号分隔的客户名称的列表。以下代码仅返回姓氏

DECLARE @vfirstname NVARCHAR(500), @vdelimiter NVARCHAR(1)
SET @vdelimiter=','

SELECT @vfirstname = FirstName + @vdelimiter
FROM dbo.Customer c

SET @vfirstname = LEFT(@vfirstname, LEN( @vfirstname ) - 1);    
PRINT @vfirstname

我能够通过引入以下语句来解决它(在Google的帮助下:]

 SET @vfirstname ='' 
 SELECT @vfirstname = @vfirstname + FirstName + @vdelimiter
 FROM dbo.Customer c

但是我无法理解这样做的必要性,在这种情况下,select语句实际上如何工作?

sql-server
1个回答
2
投票

这将在没有子字符串功能的情况下完成您所需的操作,选择“,”是您的分隔符

stuff函数使用XML路径从列表中删除第一个逗号/分隔符

-- use stuff instead of substringb
Select STUFF((
    SELECT ',' + FirstName
    FROM dbo.Customer
    FOR XML PATH('')
    ), 1, 1,'') 
FROM dbo.Customer
-- if you want a space after comma, need to update the STUFF to be 1, 2
© www.soinside.com 2019 - 2024. All rights reserved.