怎么用SQL Server将关系数据导出为XML

13次阅读

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

怎么用SQL Server将关系数据导出为XML

SQL Server 提供了原生的 FOR XML 功能,可直接将查询结果以 XML 格式返回,无需额外工具或编程。关键在于选择合适的 XML 模式,并注意数据类型和特殊字符处理。

使用 FOR XML 基本语法导出结果集

select 语句末尾添加 FOR XML 子句即可生成 XML。常用模式有三种:

  • RAW:每行生成一个同名元素(如 ),适合简单扁平结构
  • 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 作为属性
NameAddress/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#)中调用查询,用 XmlReaderXDocument 接收并保存

注意编码与特殊字符处理

SQL Server 默认以 UTF-16 输出 XML,若需 UTF-8,不能靠 T-SQL 直接指定,需在保存后转换,或由客户端处理。另外:

  • XML 中的 & 等会自动转义为 zuojiankuohaophpcn&,这是标准行为,无需干预
  • 含换行或制表符的字段,在 XML 中会保留(除非显式 REPLACE),显示时可能需格式化
  • NULL 值默认不输出对应节点;加 XSInil(如 FOR XML PATH, ELEMENTS XSINIL)可生成 xsi:nil="true" 标记

基本上就这些。掌握 FOR XML PATH + ROOT + TYPE 组合,就能稳定导出结构清晰、可嵌套、可读性强的 XML 数据。

text=ZqhQzanResources