在SQLServer2012 TSQL中,什么';使用XMLRAW、XMLAUTO和XMLPATH的区别是什么

在SQLServer2012 TSQL中,什么';使用XMLRAW、XMLAUTO和XMLPATH的区别是什么,sql,tsql,sql-server-2012,Sql,Tsql,Sql Server 2012,作为标题,所有开放的思想都受到欢迎 我在我的电脑上测试过,结果似乎是一样的 比如说 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, Fir

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

我在我的电脑上测试过,结果似乎是一样的

比如说

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有很大的影响。也许您需要控制根元素:root('SomeElementName')。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

XMLRAW:结果集中的每一行都作为一个元素,列是属性

例如:

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 AUTO;
USE BOB_DATABASE
SELECT ID, Name, First_Name, Last_Name 
FROM DBO.T_User
FOR XML PATH;
输出:

<row id="7801020202083" First_Name="John" Surname="Doe" />
<row id="9812150201082" First_Name="Samantha" Surname="Hill" />
<DBO.T_USER id="7801020202083" First_Name="John" Surname="Doe" />
<DBO.T_USER  id="7801020202083" First_Name="John" Surname="Doe" />
<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>
输出:

<row id="7801020202083" First_Name="John" Surname="Doe" />
<row id="9812150201082" First_Name="Samantha" Surname="Hill" />
<DBO.T_USER id="7801020202083" First_Name="John" Surname="Doe" />
<DBO.T_USER  id="7801020202083" First_Name="John" Surname="Doe" />
<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>
输出:

<row id="7801020202083" First_Name="John" Surname="Doe" />
<row id="9812150201082" First_Name="Samantha" Surname="Hill" />
<DBO.T_USER id="7801020202083" First_Name="John" Surname="Doe" />
<DBO.T_USER  id="7801020202083" First_Name="John" Surname="Doe" />
<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>

7801020202083
约翰
雌鹿
7801020202083
约翰
雌鹿
请也看看这个博客
用于更好的细分。

原始和自动之间的差异
-自动使用表名生成标题名,raw使用行(或者您可以使用raw('myname')重写)

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


原始路径和路径之间的差异

-@使用“行标题中的路径填充”时,列名上的前缀符号

-\在新节中使用“路径填充”时,列名上的前缀符号(与使用“自动”的联接相同,但更灵活)

此处的晶圆厂说明和易于遵循的示例如下:

如果您的问题是关于SQL Server 2012的,为什么它有一个MySQL标记而不是SQL Server标记?您能不能纠正一下,这样就可以清楚地知道您在问什么?它们根本不是一回事。如果在xml原始数据的
之后添加元素,比如xml原始数据的
,元素的
,这与xml原始数据的
有什么区别呢路径(“”)