我想获得一个用逗号分隔的客户名称的列表。以下代码仅返回姓氏
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语句实际上如何工作?
这将在没有子字符串功能的情况下完成您所需的操作,选择“,”是您的分隔符
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