该FOR XML PATH可用于串联值转换为字符串。下面的示例将值连接为CSV字符串:
DECLARE @DataSource TABLE ( [rowID] TINYINT ,[FirstName] NVARCHAR(32) ); INSERT INTO @DataSource ([rowID], [FirstName]) VALUES (1, 'Alex') ,(2, 'Peter') ,(3, 'Alexsandyr') ,(4, 'George'); SELECT STUFF ( ( SELECT ',' + [FirstName] FROM @DataSource ORDER BY [rowID] DESC FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1 ,1 ,'' );
几个重要说明:
该ORDER BY子句可用于以首选方式对值进行排序
如果将较长的值用作串联分隔符,则也STUFF必须更改功能参数;
SELECT STUFF ( ( SELECT '---' + [FirstName] FROM @DataSource ORDER BY [rowID] DESC FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1 ,3 -- the "3" could also be represented as: LEN('---') for clarity ,'' );
当使用TYPE选项和.value功能时,串联可与NVARCHAR(MAX)字符串一起使用