SQL Server 常见For XML语句比较

目录

SQL语句:

SELECT TOP (3) a.orderid,b.companyname,c.firstname
FROM Sales.MyOrders a
INNER JOIN Sales.Customers b ON b.custid = a.custid
INNER JOIN HR.Employees c ON a.empid = c.empid

结果:

For XML Raw

  • sql
SELECT TOP(3) a.orderid,b.companyname,c.firstname
FROM Sales.MyOrders a
INNER JOIN Sales.Customers b ON b.custid = a.custid
INNER JOIN HR.Employees c ON a.empid = c.empid
FOR XML RAW
  • 结果
  • 说明
    每一条记录就是一行,row是固定的标签名,列名对应里面的属性名

For XML Path

  • sql
SELECT a.orderid,b.companyname,c.firstname
FROM Sales.MyOrders a
INNER JOIN Sales.Customers b ON b.custid = a.custid
INNER JOIN HR.Employees c ON a.empid = c.empid
FOR XML PATH('MyOrders'),ROOT('Root')
  • 结果
  • 说明
    Root(可选)参数的值作为第一层,Path参数的值作为第二层,列名作为第三层,全部以标签的形式展现,最多三层,列与列平级。

For XML Auto

  • sql
SELECT TOP(3) a.orderid,b.companyname,c.firstname
FROM Sales.MyOrders a
INNER JOIN Sales.Customers b ON b.custid = a.custid
INNER JOIN HR.Employees c ON a.empid = c.empid
FOR XML Auto
  • 结果
  • 说明
    根据表的别名,列出现的顺序(第一个列是哪个表的,哪个表名就在最外层),自动依次缩进生成XML,列名是表名中的属性,有多少个表,就有多少层

For XML Auto,Element

  • sql
SELECT TOP(3) a.orderid,b.companyname,c.firstname
FROM Sales.MyOrders a
INNER JOIN Sales.Customers b ON b.custid = a.custid
INNER JOIN HR.Employees c ON a.empid = c.empid
FOR XML AutoElement
  • 结果
  • 说明
    在For XML Auto的基础上,将原来是属性的列名变为了标签。