[英]How FOR XML Works in SQL Server
有人可以解释一下如何在SQL Server中使用FOR XML吗? 这是不使用用户定义的函数按行连接字符串的唯一方法吗? 我从这篇文章中得到了它,做了我需要做的事情,但是我不理解。
发布此消息的人没有任何解释。 经过详尽的搜索,我找不到任何可以理解的东西。 不,鉴于我的SQL技能有限,MSDN没有帮助。
这是我的SQL,只有名称与该帖子中的名称有所不同。
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
这是不使用用户定义的函数按行连接字符串的唯一方法吗?
这是连接行的最简单方法
如何在SQL Server中使用FOR XML
我想下面的示例或多或少会清楚地了解如何使用它
------------------------------------------------------------
--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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.