使用 FOR XML PATH 來連線值

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) 字串一起使用