SQL Server 中的 FOR XML AUTO 模式将结果集作为嵌套的 XML 元素返回。与其它 XML 模式不同,For XML AUTO 对生成的 XML 文件提供的控制很少。这就是为什么我们在实际应用中不使用此 SQL FOR XML AUTO 模式。
在此 SQL FOR XML AUTO 示例中,我们使用了 SQL Test 中存在的 New Employees 和 Department 表。下面的截图将向您展示 SQL Server 中 New Employees 表的数据。

Department 表中数据如下所示

SQL FOR XML AUTO 示例
在本例中,我们将向您展示使用 FOR XML AUTO 模式的基本方法。使用 AUTO 模式最简单的方法是在 Select Statement 后面追加 FOR XML AUTO。
-- SQL Server FOR XML AUTO Example
SELECT [EmpID]
,[FirstName]
,[LastName]
,[Education]
,[YearlyIncome]
,[Sales]
,[DeptID]
FROM [NewEmployees]
FOR XML AUTO;

如您所见,该查询已生成 XML 文件。请点击超链接查看 XML 文件。

从上图可以看出,New Employees 表中的每一行都映射到了 <NewEmployees> 元素,而列则成为了属性。这对于单个表来说非常好,让我尝试使用 SQL Server 的 Join 在多个表中进行操作。
-- SQL Server FOR XML AUTO Example
SELECT Employee.[EmpID]
,Employee.[FirstName]
,Employee.[LastName]
,Employee.[Education]
,Employee.[YearlyIncome]
,Employee.[Sales]
,Depart.[DepartmentName]
FROM [NewEmployees] AS Employee
INNER JOIN [Department] AS Depart
ON Employee.DeptID = Depart.DeptID
FOR XML AUTO;

现在您可以看到行元素根据别名进行了更改。

SQL FOR XML AUTO 示例 2
如您所见,所有列都作为 <Employee> 和 <Depart> 元素的属性添加。在此示例中,我们将展示如何将列值添加为子元素(而不是属性)。要实现这一点,我们在 SQL Server 中将 ELEMENTS 关键字与 FOR XML AUTO 一起使用。
SELECT Employee.[EmpID]
,Employee.[FirstName]
,Employee.[LastName]
,Employee.[Education]
,Employee.[YearlyIncome]
,Employee.[Sales]
,Depart.[DepartmentName]
FROM [NewEmployees] AS Employee
INNER JOIN [Department] AS Depart
ON Employee.DeptID = Depart.DeptID
FOR XML AUTO, ELEMENTS;

现在您可以看到 For XML auto 已将列值添加为子元素。

FOR XML AUTO 示例 3
您可以使用 SQL Server FOR XML AUTO 创建一个新的根元素,该元素将包装其中所有的现有元素。要实现此目的,我们必须将 ROOT 关键字与 FOR XML AUTO 一起使用。
SELECT Employee.[EmpID]
,Employee.[FirstName]
,Employee.[LastName]
,Employee.[Education]
,Employee.[YearlyIncome]
,Employee.[Sales]
,Depart.[DepartmentName]
FROM [NewEmployees] AS Employee
INNER JOIN [Department] AS Depart
ON Employee.DeptID = Depart.DeptID
FOR XML AUTO, ROOT, ELEMENTS;

XML 文件是

如果您观察上面的截图,会有一个 <root> 元素作为父级。让我更改这个默认元素名称。
SELECT Employee.[EmpID]
,Employee.[FirstName]
,Employee.[LastName]
,Employee.[Education]
,Employee.[YearlyIncome]
,Employee.[Sales]
,Depart.[DepartmentName]
FROM [NewEmployees] AS Employee
INNER JOIN [Department] AS Depart
ON Employee.DeptID = Depart.DeptID
FOR XML AUTO, ROOT('EmployeDetails'), ELEMENTS;
现在您可以看到 <root> 元素已被 <EmployeeDetails> 替换。

FOR XML AUTO 示例 4
如果您观察以上所有情况,生成的 XML 文件会忽略具有 NULL 值的元素。这是 For XML Auto 的默认模式,但您可以通过添加 XSINIL 关键字来更改它。
-- SQL Server FOR XML AUTO Example
SELECT Employee.[EmpID]
,Employee.[FirstName]
,Employee.[LastName]
,Employee.[Education]
,Employee.[YearlyIncome]
,Employee.[Sales]
,Depart.[DepartmentName]
FROM [NewEmployees] AS Employee
INNER JOIN [Department] AS Depart
ON Employee.DeptID = Depart.DeptID
FOR XML AUTO,
ROOT('EmployeDetails'),
ELEMENTS XSINIL;

现在您可以看到 XML 文件显示了带有 null 值的元素。

评论已关闭。