SQL Server 的 FOR XML PATH 是最常用且推荐的 XML 导出方式,支持自定义路径、属性、嵌套及 ROOT 封装,配合 TYPE 可返回 XML 类型便于处理。

SQL Server 提供了原生的 FOR XML 功能,可直接将查询结果以 XML 格式返回,无需额外工具或编程。关键在于选择合适的 XML 模式,并注意数据类型和特殊字符处理。
使用 FOR XML 基本语法导出结果集
在 SELECT 语句末尾添加 FOR XML 子句即可生成 XML。常用模式有三种:
- RAW:每行生成一个同名元素(如 <row .../>),适合简单扁平结构
- AUTO:按 SELECT 列表中的表名自动嵌套,适合多表连接场景
- EXPLICIT:完全手动控制层级和属性,灵活性高但写法复杂(一般不首选)
-
PATH:最常用,用列别名定义路径(如
Customer/Name),支持自定义元素名、属性和嵌套
推荐用 FOR XML PATH 生成结构化 XML
PATH 模式清晰易控,适合大多数导出需求。例如导出客户信息并嵌套订单:
SELECT
c.CustomerID AS '@id',
c.CompanyName AS 'Name',
c.Country AS 'Address/Country',
(SELECT OrderID, OrderDate
FROM Orders o
WHERE o.CustomerID = c.CustomerID
FOR XML PATH('Order'), TYPE) AS 'Orders'
FROM Customers c
WHERE c.Country = 'Germany'
FOR XML PATH('Customer'), ROOT('Customers'), TYPE;说明:
– @id 表示将 CustomerID 作为属性
– Name 和 Address/Country 定义元素路径
– 子查询加 FOR XML ... TYPE 确保嵌套 XML 不被转义
– ROOT('Customers') 包裹顶层根节点
– TYPE 返回 XML 数据类型(便于后续处理)
导出到文件需借助客户端或 SQLCMD
SQL Server Management Studio(SSMS)本身不直接保存 XML 到文件,但有几种实用方式:
- 在 SSMS 中执行查询 → 右键结果网格 → “另存为…” → 保存为 .xml 文件(注意:大结果可能被截断)
- 用
sqlcmd命令行工具重定向输出:sqlcmd -S MyServer -d Northwind -Q "SELECT * FROM Customers FOR XML AUTO, ROOT('data')" -o "output.xml" -h -1 -y 0
其中-h -1去除列头,-y 0防止 XML 字段被截断 - 在应用程序(如 C#)中调用查询,用
XmlReader或XDocument接收并保存
注意编码与特殊字符处理
SQL Server 默认以 UTF-16 输出 XML,若需 UTF-8,不能靠 T-SQL 直接指定,需在保存后转换,或由客户端处理。另外:
- XML 中的
<、&等会自动转义为、<code>&,这是标准行为,无需干预 - 含换行或制表符的字段,在 XML 中会保留(除非显式 REPLACE),显示时可能需格式化
- NULL 值默认不输出对应节点;加
XSINIL(如FOR XML PATH, ELEMENTS XSINIL)可生成xsi:nil="true"标记
基本上就这些。掌握 FOR XML PATH + ROOT + TYPE 组合,就能稳定导出结构清晰、可嵌套、可读性强的 XML 数据。










