在SQLServer 2012 TSQL中,使用XML RAW,XML AUTO和XML PATH有什么区别



作为标题,欢迎有求于人

我在我的电脑上测试了一下,输出似乎是一样的。

例如

USE BOB_DATABASE
SELECT ID, Name, First_Name, Last_Name FROM DBO.T_User
FOR XML AUTO
USE BOB_DATABASE
SELECT ID, Name, First_Name, Last_Name FROM DBO.T_User
FOR XML RAW
USE BOB_DATABASE
SELECT ID, Name, First_Name, Last_Name FROM DBO.T_User
FOR XML RAW, ELEMENTS
USE BOB_DATABASE
SELECT ID, Name, First_Name, Last_Name FROM DBO.T_User
FOR XML PATH('CUSTOMERS')

XML RAW:结果集中的每一行作为一个元素,列作为属性。

的例子:

USE BOB_DATABASE
SELECT ID, Name, First_Name, Last_Name 
FROM DBO.T_User
FOR XML RAW;
输出:

<row id="7801020202083" First_Name="John" Surname="Doe" />
<row id="9812150201082" First_Name="Samantha" Surname="Hill" />

XML AUTO:表名是你的元素

的例子:

USE BOB_DATABASE
SELECT ID, Name, First_Name, Last_Name 
FROM DBO.T_User
FOR XML AUTO;
输出:

<DBO.T_USER id="7801020202083" First_Name="John" Surname="Doe" />
<DBO.T_USER  id="7801020202083" First_Name="John" Surname="Doe" />

XML路径:表列作为子元素传递。

的例子:

USE BOB_DATABASE
SELECT ID, Name, First_Name, Last_Name 
FROM DBO.T_User
FOR XML PATH;
输出:

<row>
  <id>7801020202083</id>
  <First_Name>John</First_Name>
  <Surname>Doe</Surname>
</row>
<row>
  <id>7801020202083</id>
  <First_Name>John</First_Name>
  <Surname>Doe</Surname>
</row>

也请查看这个博客https://www.simple-talk.com/sql/learn-sql-server/using-the-for-xml-clause-to-return-query-results-as-xml/为了更好的分解

不幸的是,它们真的不一样。看看节点是如何布局的。看看属性。这些细微的差别对如何使用XML有很大的影响。也许您需要控制根元素:root ('SomeElementName')。MSDN对每个语法选项都有非常全面的解释。xml的MSDN。我已经发布了一些代码,将帮助您发挥周围的差异。此外,只有在代码中执行连接时,一些语法才会有明显的变化。从而帮助你建立等级制度。

IF OBJECT_ID('tempdb..#XmlTestTable') IS NOT NULL DROP TABLE #XmlTestTable
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')
--YOUR TESTS
SELECT * FROM #XmlTestTable FOR XML AUTO
SELECT * FROM #XmlTestTable FOR XML RAW
SELECT * FROM #XmlTestTable FOR XML RAW, ELEMENTS
SELECT * FROM #XmlTestTable FOR XML PATH('Customers')
DROP TABLE #XmlTestTable

raw和auto的区别
-auto使用表名生成头名,raw使用行(或者你可以使用raw('myname')重写)

-如果查询有连接,自动为连接表创建子节

raw和path之间的差异

在行标题 中使用路径填充时,在列名前加上

-@符号

-在新节中使用路径填充时,在列名上添加符号前缀(与使用auto的连接相同,但更灵活)

这里有

fab的解释和简单的例子:http://thinknook.com/sql -服务器返回的xml -结果- 2012 - 12 - 01/

最新更新