SQL FOR XML RAW

在 SQL Server 中使用 FOR XML 的 Raw 模式是为了将结果集中的每一行转换为一个 XML 元素。对于本 SQL FOR XML RAW 模式示例,我们使用的是 SQL Test 中存在的新员工表。下面的截图显示了该数据库中的 SQL Server 表。

SQL FOR XML RAW 1

SQL FOR XML RAW 示例 1

在本例中,我们将向您展示使用 FOR XML RAW 模式的基本方法。使用 Raw 模式最简单的方法是在您的 Select 语句之后添加 FOR XML RAW 到我们的 数据库中。

-- SQL Server FOR XML RAW Example
SELECT  [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [NewEmployee]
  FOR XML RAW;
SQL FOR XML RAW 2

正如您从上面的 SQL Server 截图中所看到的,查询已生成了 XML 文件。请单击超链接查看 XML 文件。

SQL FOR XML RAW 3

请注意,新员工表中的每一行都映射到 元素,并且列成为了属性。

SQL FOR XML RAW 示例 2

在此 FOR XML RAW 示例中,让我们看看如何将列值添加为子元素(而不是属性)。为此,我们必须将 ELEMENTS 关键字与 FOR XML RAW 一起使用。

-- SQL Server FOR XML RAW Example

SELECT  [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [NewEmployee]
  FOR XML RAW, ELEMENTS;
SQL FOR XML RAW 4

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

SQL FOR XML RAW 5

FOR XML RAW 示例 3

如果您查看之前的 For XML RAW 图像,每一行都由默认的 元素分隔。让我们看看如何用自定义元素覆盖默认行。

-- SQL Server FOR XML RAW Example

SELECT  [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [NewEmployee]
  FOR XML RAW('EmployeeDetails'), ELEMENTS;
SQL FOR XML RAW 6

如您所见, 元素已被 替换。

SQL FOR XML RAW 7

FOR XML RAW 示例 4

SQL Server FOR XML RAW 允许您创建一个新的根元素,该元素将包含所有其他元素。为此,请将 ROOT 关键字与 FOR XML RAW 一起使用。

-- SQL Server FOR XML RAW Example

SELECT  [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [NewEmployee]
  FOR XML RAW('Employee'), ROOT, ELEMENTS;
SQL FOR XML RAW 8

XML 文件是

SQL FOR XML RAW 8

SQL FOR XML RAW 示例 5

如果您观察上面的截图,在父级别有一个 元素。在此示例中,我们将更改此默认元素名称。

-- SQL Server FOR XML RAW Example

SELECT  [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [NewEmployee]
  FOR XML RAW('Employee'), 
          ROOT('EmployeeDetails'), ELEMENTS;
SQL FOR XML RAW 10

现在您可以看到 元素已被 替换。

SQL FOR XML RAW 11

FOR XML RAW 示例 6

如果您观察所有上述示例,生成的 XML 文件会忽略带有 NULL 值的元素。这是 Sql Server For XML Raw 的默认行为,但您可以通过添加 XSINIL 关键字来更改此行为。

-- SQL Server FOR XML RAW Example

SELECT  [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [NewEmployee]
  FOR XML RAW('Employee'), 
          ROOT('EmployeeDetails'), ELEMENTS XSINIL;
SQL FOR XML RAW 12

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

SQL FOR XML RAW 13

FOR XML RAW 示例 7

通过使用 XMLSCHEMA 关键字,您可以生成带有架构的 XML 文件。在本 SQL FOR XML RAW 示例中,我们将展示相同的操作。

-- SQL Server FOR XML RAW Example

SELECT  [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [NewEmployee]
  FOR XML RAW('Employee'), 
          ROOT('EmployeeDetails'), ELEMENTS XSINIL, XMLSCHEMA;
SQL FOR XML RAW 14

您可以看到 For XML Raw 正在返回带有架构的 XML 文件。

SQL FOR XML RAW 15

让我将默认目标命名空间更改为自定义命名空间。

-- SQL Server FOR XML RAW Example
SELECT  [EmpID]
      ,[FirstName]
      ,[LastName]
      ,[Education]
      ,[Occupation]
      ,[YearlyIncome]
      ,[Sales]
      ,[HireDate]
  FROM [NewEmployee]
  FOR XML RAW('Employee'), 
          ROOT('EmployeeDetails'), ELEMENTS XSINIL, XMLSCHEMA('urn:tutorialgateway.org');
SQL FOR XML RAW 16

您可以看到我们在上面的查询中使用的命名空间。

SQL FOR XML RAW 17