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
有人可以解释一下 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