| 模式 | 特點 | 典型輸出結構 |
|---|---|---|
| RAW | 每行一個 <row> 元素,列作屬性 | <row CompanyName="A" /><row CompanyName="B" /> |
| AUTO | 表名作元素名,多表巢狀 | <Customers><Orders>...</Orders></Customers> |
| EXPLICIT | 完全控制層次,需構建通用表(含 Tag/Parent) | 任意複雜 XML,靈活但編寫繁瑣 |
SELECT * FROM table1
[FOR XML {RAW | AUTO | EXPLICIT} [, XMLDATA] [, ELEMENTS] [, BINARY BASE64]]
[OPTION (<query hint>...)]
ELEMENTS:列作子元素而非屬性XMLDATA:返回 XDR Schema(已棄用,改用 XSD)BINARY BASE64:二進制列 Base64 編碼SELECT 1 AS Tag, NULL AS Parent,
Employees.LastName AS [Employees!1!LastName],
NULL AS [EmployeeTerritories!2!TerritoryID]
FROM Employees
UNION ALL
SELECT 2, 1,
Employees.LastName,
EmployeeTerritories.TerritoryID
FROM EmployeeTerritories
JOIN Employees ON EmployeeTerritories.EmployeeID = Employees.EmployeeID
ORDER BY [Employees!1!LastName], Tag
FOR XML EXPLICIT;
關鍵規則:
Tag(當前層級標識)和 Parent(父層級 Tag)[元素名!Tag值!列名]ORDER BY 必須包含父元素排序鍵 + Tag,保證父子相鄰sqlxml)schema(URL 查詢)、template(模板)、dbobject(對象)目錄https://localhost/sqlxml?sql=SELECT+*+FROM+Customers+FOR+XML+AUTO&root=root
sql= 後接 URL 編碼的 SQL(空格用 +)root= 指定根元素名文件 template/getCustomers.xml:
<root xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:query>
SELECT * FROM Customers FOR XML AUTO
</sql:query>
</root>
訪問:https://localhost/sqlxml/template/getCustomers.xml
<root xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<sql:header>
<sql:param name="type">U</sql:param> <!-- 默認值 -->
</sql:header>
<sql:query>
SELECT xtype, name FROM sysobjects WHERE xtype = @type FOR XML AUTO
</sql:query>
</root>
訪問:https://localhost/sqlxml/template/getObjects.xml?type=P
SELECT / EXEC 業務存儲過程xp_cmdshell 等危險擴展存儲過程