FOR XML 如何在 SQL 服务器中工作

How FOR XML Works in SQL Server

有人可以解释一下 FOR XML 在 SQL 服务器中是如何使用的吗?这是在不使用用户定义函数的情况下按行连接字符串的唯一方法吗?我从这个post中得到它,做了我需要做的,但我不明白。

post编辑这篇文章的人没有做任何解释。经过详尽的 搜索我找不到任何可以理解的东西。不,考虑到我有限的 SQL 技能,MSDN 没有帮助。

这是我的 SQL,只是名字与 post 中的名字不同。

SELECT 
  ID,
  STUFF((
    SELECT ' -' + Code
    FROM #Z 
    WHERE (ID = Results.ID) 
    FOR XML PATH(''),TYPE).value('(./text())[1]','NVARCHAR(MAX)'),1,2,''
 ) AS ConcatCode
FROM #Z Results
GROUP BY ID

Is this the only way to concatenate strings by rows without using an user-defined function?

这是连接行的最简单方法

how FOR XML is used in SQL Server

我想下面的示例将或多或少地让您清楚地了解如何使用它

------------------------------------------------------------
--Create temp table for testing
IF OBJECT_ID('Tempdb..#Z') IS NOT NULL 
    DROP TABLE #Z
CREATE TABLE #Z
    (
      ID INT ,
      SomeText VARCHAR(3)
    )
INSERT  INTO #Z
        ( ID, SomeText )
VALUES  ( 1, 'AAA' ),
        ( 2, 'BBB' ),
        ( 3, 'CCC' ),
        ( 1, 'ZZZ' ),
        ( 1, 'XXX' ),
        ( 2, 'YYY' )
------------------------------------------------------------
--1. Concatenate
SELECT  SUBSTRING(( SELECT  ',' + SomeText
                    FROM    #Z
                  FOR
                    XML PATH('')
                  ), 2, 1000) AS Concatenated
------------------------------------------------------------
--2. Concatenate for each ID
SELECT DISTINCT
        Z_out.id ,
        SUBSTRING(( SELECT  ',' + SomeText
                    FROM    #Z AS Z_in
                    WHERE   Z_in.ID = Z_out.id
                  FOR
                    XML PATH('')
                  ), 2, 1000) AS Concatenated
FROM    #Z AS Z_out