使用FOR XML子句可将SQL Server查询结果转为XML,常用方式包括RAW、AUTO和EXPLICIT模式,并可通过ROOT、ELEMENTS等选项控制结构与格式。

在SQL Server中,将查询结果输出为XML格式非常实用,尤其在数据交换、接口对接或生成配置文件等场景。通过T-SQL的FOR XML子句,可以轻松将结果集转换为结构化的XML数据。以下是几种常用方式及实际示例。
使用 FOR XML RAW
RAW模式将每一行结果转换为一个XML元素,列值作为属性或子元素。
- 每行对应一个
元素(可自定义标签名)
- 默认列值作为属性输出,加 ELEMENTS 可改为子元素
示例:
SELECT TOP 3
CustomerID,
CompanyName,
City
FROM Customers
FOR XML RAW;
输出:
使用 FOR XML AUTO
AUTO模式根据SELECT语句中的表顺序自动推断嵌套结构,适合多表连接查询。
- 按表名生成层级元素
- 结构较简洁,但控制性不如EXPLICIT
示例:
SELECT c.CustomerID, o.OrderID, o.OrderDate FROM Customers c JOIN Orders o ON c.CustomerID = o.CustomerID WHERE c.CustomerID = 'ALFKI' FOR XML AUTO, ELEMENTS;
输出:
ALFKI 10643 2022-08-25T00:00:00 10692 2022-10-03T00:00:00
使用 FOR XML EXPLICIT
EXPLICIT模式提供完全控制XML结构的能力,适用于复杂层级需求。
- 需手动构造 Tag、Parent 和列的映射关系
- 语法复杂,一般用于特定格式要求
由于其复杂性,通常建议在必须精确控制层级和命名时才使用。
添加根节点与格式化
无论使用哪种模式,都可以通过选项增强输出效果。
- ROOT():添加根元素
- ELEMENTS:列值输出为子元素而非属性
- TYPE:返回XML数据类型,便于后续处理
完整示例:
SELECT CustomerID, CompanyName, City
FROM Customers
WHERE Country = 'Germany'
FOR XML RAW('Customer'), ROOT('Customers'), ELEMENTS;
输出:
... 1 Alfreds Futterkiste Berlin
基本上就这些。掌握FOR XML RAW、AUTO和ROOT等选项,就能满足大多数将SQL查询结果转为XML的需求。不复杂但容易忽略细节,比如ELEMENTS和ROOT的搭配使用。










