使用 XPath 表示式指定結構
SELECT
'XPath example' AS 'head/title',
'This example demonstrates ' AS 'body/p',
'https://www.w3.org/TR/xpath/' AS 'body/p/a/@href',
'XPath expressions' AS 'body/p/a'
FOR XML PATH('html')
<html>
<head>
<title>XPath example</title>
</head>
<body>
<p>This example demonstrates <a href="https://www.w3.org/TR/xpath/">XPath expressions</a></p>
</body>
</html>
在 FOR XML PATH
中,沒有名稱的列成為文字節點。NULL
或''
因此成為空文字節點。注意:你可以使用 AS *
將命名列轉換為未命名的列
DECLARE @tempTable TABLE (Ref INT, Des NVARCHAR(100), Qty INT)
INSERT INTO @tempTable VALUES (100001, 'Normal', 1), (100002, 'Foobar', 1), (100003, 'Hello World', 2)
SELECT ROW_NUMBER() OVER (ORDER BY Ref) AS '@NUM',
'REF' AS 'FLD/@NAME', REF AS 'FLD', '',
'DES' AS 'FLD/@NAME', DES AS 'FLD', '',
'QTY' AS 'FLD/@NAME', QTY AS 'FLD'
FROM @tempTable
FOR XML PATH('LIN'), ROOT('row')
<row>
<LIN NUM="1">
<FLD NAME="REF">100001</FLD>
<FLD NAME="DES">Normal</FLD>
<FLD NAME="QTY">1</FLD>
</LIN>
<LIN NUM="2">
<FLD NAME="REF">100002</FLD>
<FLD NAME="DES">Foobar</FLD>
<FLD NAME="QTY">1</FLD>
</LIN>
<LIN NUM="3">
<FLD NAME="REF">100003</FLD>
<FLD NAME="DES">Hello World</FLD>
<FLD NAME="QTY">2</FLD>
</LIN>
</row>
使用(空)文字節點有助於將先前輸出的節點與下一個節點分開,以便 SQL Server 知道為下一列啟動新元素。否則,當屬性已經存在於它認為是當前元素時,它會變得混亂。
例如,如果沒有 SELECT
語句中元素和屬性之間的空字串,SQL Server 會給出錯誤:
以屬性為中心的列’FLD / @ NAME’不能位於 FOR XML PATH 中 XML 層次結構中非屬性中心的兄弟之後。
另請注意,此示例還將 XML 包裝在由 ROOT('row')
指定的名為 row
的根元素中