使用 xml 原始元素和 xml 路径时查询结果相同
Query results same when using xml raw,element and xml path
我正在使用 sql-server 2012:
我有这样的查询:
CREATE TABLE #XmlTestTable
(
ID INT PRIMARY KEY IDENTITY(1,1),
FirstName VARCHAR(20),
LastName VARCHAR(20)
)
INSERT INTO #XmlTestTable (FirstName,LastName) VALUES
('John','Doe'),
('Jane','Doe'),
('Brian','Smith'),
('Your','Mom')
SELECT * FROM #XmlTestTable FOR XML RAW, ELEMENTS --1
SELECT * FROM #XmlTestTable FOR XML PATH --2
1 的结果:
<row>
<ID>1</ID>
<FirstName>John</FirstName>
<LastName>Doe</LastName>
</row>
<row>
<ID>2</ID>
<FirstName>Jane</FirstName>
<LastName>Doe</LastName>
</row>
<row>
<ID>3</ID>
<FirstName>Brian</FirstName>
<LastName>Smith</LastName>
</row>
<row>
<ID>4</ID>
<FirstName>Your</FirstName>
<LastName>Mom</LastName>
</row>
2 的结果:
<row>
<ID>1</ID>
<FirstName>John</FirstName>
<LastName>Doe</LastName>
</row>
<row>
<ID>2</ID>
<FirstName>Jane</FirstName>
<LastName>Doe</LastName>
</row>
<row>
<ID>3</ID>
<FirstName>Brian</FirstName>
<LastName>Smith</LastName>
</row>
<row>
<ID>4</ID>
<FirstName>Your</FirstName>
<LastName>Mom</LastName>
</row>
两个查询给出相同的结果,?
如何找出差异以及何时使用 xml 路径或 xml 元素
Sql-server 2012编译于.
RAW
模式将查询结果集中的每一行转换为具有通用标识符 <row>
或可选提供的元素名称的 XML 元素。
行集中非 NULL 的每个列值都映射到 <row>
元素的 属性 ,但如果您已指定 ELEMENTS
选项,列值将映射到 子元素 ,而不是属性。
在PATH
模式下,列名或列别名被视为XPath
表达式。这些表达式指示如何将值映射到 XML。每个 XPath 表达式都是一个提供项目类型的相对 XPath,例如属性、元素和标量值,以及将相对于 行元素生成的节点的名称和层次结构.
所以 PATH
模式为您提供了更多的输出灵活性。
例如
select FirstName as "Name/First", LastName as "Name/Last" from #XmlTestTable FOR XML PATH
会给你xml个赞
<row>
<Name>
<First>John</First>
<Last>Doe</Last>
</Name>
</row>
// the rest of xml skipped
和这个查询
select FirstName as "@FirstName", LastName as "@LastName" from #XmlTestTable FOR XML path
会给你 xml 以下格式:
<row FirstName="John" LastName="Doe" />
<row FirstName="Jane" LastName="Doe" />
<row FirstName="Brian" LastName="Smith" />
<row FirstName="Your" LastName="Mom" />
或者您甚至可以在输出中混合属性和元素,例如:
select
FirstName + ' ' + LastName as "Name/@Full",
FirstName as "Name/First",
LastName as "Name/Last"
from #XmlTestTable FOR XML path
会给你
<row>
<Name Full="John Doe">
<First>John</First>
<Last>Doe</Last>
</Name>
</row>
在您的特定情况下,两个查询的输出完全相同,只是因为您没有为 PATH
模式指定 "special" 列名称,并为 [=16= 使用了 ELEMENTS
选项]模式。
我正在使用 sql-server 2012:
我有这样的查询:
CREATE TABLE #XmlTestTable
(
ID INT PRIMARY KEY IDENTITY(1,1),
FirstName VARCHAR(20),
LastName VARCHAR(20)
)
INSERT INTO #XmlTestTable (FirstName,LastName) VALUES
('John','Doe'),
('Jane','Doe'),
('Brian','Smith'),
('Your','Mom')
SELECT * FROM #XmlTestTable FOR XML RAW, ELEMENTS --1
SELECT * FROM #XmlTestTable FOR XML PATH --2
1 的结果:
<row>
<ID>1</ID>
<FirstName>John</FirstName>
<LastName>Doe</LastName>
</row>
<row>
<ID>2</ID>
<FirstName>Jane</FirstName>
<LastName>Doe</LastName>
</row>
<row>
<ID>3</ID>
<FirstName>Brian</FirstName>
<LastName>Smith</LastName>
</row>
<row>
<ID>4</ID>
<FirstName>Your</FirstName>
<LastName>Mom</LastName>
</row>
2 的结果:
<row>
<ID>1</ID>
<FirstName>John</FirstName>
<LastName>Doe</LastName>
</row>
<row>
<ID>2</ID>
<FirstName>Jane</FirstName>
<LastName>Doe</LastName>
</row>
<row>
<ID>3</ID>
<FirstName>Brian</FirstName>
<LastName>Smith</LastName>
</row>
<row>
<ID>4</ID>
<FirstName>Your</FirstName>
<LastName>Mom</LastName>
</row>
两个查询给出相同的结果,?
如何找出差异以及何时使用 xml 路径或 xml 元素 Sql-server 2012编译于.
RAW
模式将查询结果集中的每一行转换为具有通用标识符 <row>
或可选提供的元素名称的 XML 元素。
行集中非 NULL 的每个列值都映射到 <row>
元素的 属性 ,但如果您已指定 ELEMENTS
选项,列值将映射到 子元素 ,而不是属性。
在PATH
模式下,列名或列别名被视为XPath
表达式。这些表达式指示如何将值映射到 XML。每个 XPath 表达式都是一个提供项目类型的相对 XPath,例如属性、元素和标量值,以及将相对于 行元素生成的节点的名称和层次结构.
所以 PATH
模式为您提供了更多的输出灵活性。
例如
select FirstName as "Name/First", LastName as "Name/Last" from #XmlTestTable FOR XML PATH
会给你xml个赞
<row>
<Name>
<First>John</First>
<Last>Doe</Last>
</Name>
</row>
// the rest of xml skipped
和这个查询
select FirstName as "@FirstName", LastName as "@LastName" from #XmlTestTable FOR XML path
会给你 xml 以下格式:
<row FirstName="John" LastName="Doe" />
<row FirstName="Jane" LastName="Doe" />
<row FirstName="Brian" LastName="Smith" />
<row FirstName="Your" LastName="Mom" />
或者您甚至可以在输出中混合属性和元素,例如:
select
FirstName + ' ' + LastName as "Name/@Full",
FirstName as "Name/First",
LastName as "Name/Last"
from #XmlTestTable FOR XML path
会给你
<row>
<Name Full="John Doe">
<First>John</First>
<Last>Doe</Last>
</Name>
</row>
在您的特定情况下,两个查询的输出完全相同,只是因为您没有为 PATH
模式指定 "special" 列名称,并为 [=16= 使用了 ELEMENTS
选项]模式。