9

作为标题,欢迎所有开放的思想

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

例如。

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')
4

3 回答 3

13

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/更好的击穿。

于 2015-05-29T09:44:18.557 回答
8

不幸的是,它们真的不一样。看看节点是如何布局的。看属性。有一些细微的差别会对 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
于 2013-06-13T20:59:45.213 回答
1

raw 和 auto 之间的区别
-auto 使用表名生成标题名称, raw 使用行(或者您可以使用 raw('myname') 覆盖

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

原始和路径之间的区别

-@ 在行标题中使用路径填充时在列名上添加前缀的符号

-\ 在新部分中使用路径填充时以列名为前缀的符号(与使用 auto 的连接相同,但更灵活)

这里的工厂解释很容易理解:http: //thinknook.com/sql-server-returning-xml-results-2012-12-01/

于 2016-10-11T12:50:18.447 回答