Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 数据库中的 XML » 在数据库中使用 XML » 以 XML 格式获取查询结果

 

使用 FOR XML RAW

当您在查询中指定 FOR XML RAW 时,每一行都会表示为一个 <row> 元素,而每一列都是 <row> 元素的一个属性。

语法
FOR XML RAW[, ELEMENTS ]
参数

ELEMENTS   让 FOR XML RAW 为结果中的每一列都生成一个 XML 元素,而不是生成一个属性。如果有 NULL 值,生成的 XML 文档中就会忽略该元素。以下查询会生成 <EmployeeID> 元素和 <DepartmentName> 元素:

SELECT Employees.EmployeeID, Departments.DepartmentName
FROM Employees JOIN Departments
   ON Employees.DepartmentID=Departments.DepartmentID
FOR XML RAW, ELEMENTS;

此查询会得到以下结果:

<row>
   <EmployeeID>102</EmployeeID>
   <DepartmentName>R &amp; D</DepartmentName>
</row>
<row>
   <EmployeeID>105</EmployeeID>
   <DepartmentName>R &amp; D</DepartmentName>
</row> 
<row>
   <EmployeeID>160</EmployeeID>
   <DepartmentName>R &amp; D</DepartmentName>
</row>
<row>
   <EmployeeID>243</EmployeeID>
   <DepartmentName>R &amp; D</DepartmentName>
</row>
...
用法

在您执行包含 FOR XML RAW 的查询时,BINARY、LONG BINARY、IMAGE 和 VARBINARY 列中的数据会自动以 base64 编码格式返回。

缺省情况下,结果中会忽略 NULL 值。此行为是由 for_xml_null_treatment 选项控制的。

有关如何在包含 FOR XML 子句的查询中返回 NULL 值的信息,请参见FOR XML 和 NULL 值

FOR XML RAW 不会返回结构完好的 XML 文档,因为该文档没有单一的根节点。如果需要 <root> 元素,可以使用 XMLELEMENT 函数插入一个。例如,

SELECT XMLELEMENT( NAME root,
                   (SELECT EmployeeID AS id, GivenName AS name
                   FROM Employees FOR XML RAW));

有关 XMLELEMENT 函数的信息,请参见XMLELEMENT 函数 [String]

通过指定别名,可以更改 XML 文档中使用的属性名或元素名。以下查询会将 ID 属性重命名为 product_ID:

SELECT ID AS product_ID
FROM Products
WHERE Color='black'
FOR XML RAW;

此查询会得到以下结果:

<row product_ID="302"/>
<row product_ID="400"/>
<row product_ID="501"/>
<row product_ID="700"/>

结果的顺序取决于优化程序所选择的计划,除非您以其它方式请求。如果您希望结果按某种特定顺序显示,必须在查询中加入 ORDER BY 子句,例如:

SELECT Employees.EmployeeID, Departments.DepartmentName
FROM Employees JOIN Departments
   ON Employees.DepartmentID=Departments.DepartmentID
ORDER BY EmployeeID
FOR XML RAW;
示例

假定像下面这样,您想检索有关某名雇员隶属于哪个部门的信息:

SELECT Employees.EmployeeID, Departments.DepartmentName
FROM Employees JOIN Departments
   ON Employees.DepartmentID=Departments.DepartmentID
FOR XML RAW;

返回以下 XML 文档:

<row EmployeeID="102" DepartmentName="R &amp; D"/>
<row EmployeeID="105" DepartmentName="R &amp; D"/>
<row EmployeeID="160" DepartmentName="R &amp; D"/>
<row EmployeeID="243" DepartmentName="R &amp; D"/>
...