类型化与非类型化的 XML

可以创建 xml 类型的变量、参数和列。或者,可以将 XML 架构的集合与 xml 类型的变量、参数或列关联。在这种情况下,xml 数据类型实例称为类型化实例。否则,XML 实例称为非类型化实例。

XML 架构提供以下信息:

  • 验证约束
    每当分配或修改类型化的 xml 实例时,SQL Server 将验证该实例。
  • 有关实例数据的数据类型信息
    架构提供有关 xml 数据类型实例中的属性和元素的类型信息。类型信息为值提供更精确的操作语义。例如,可以对十进制值执行十进制算术运算,而不能对字符串值执行十进制算术运算。因此,与非类型化的 XML 相比,可以对类型化的 XML 存储进行更大程度的压缩。

在创建类型化的 xml 变量、参数或列之前,首先必须通过创建 XML 架构集合来注册 XML 架构集合。然后,可以将 XML 架构集合与 xml 数据类型的变量、参数或列关联。下列示例说明如何进行此操作。

示例

在下列示例中,使用由两部分组成的名称命名约定指定 XML 架构集合名称。第一部分是 AdventureWorks 架构名称,第二部分是 XML 架构集合名称。

A. 创建 xml 类型变量并将架构集合与其关联

下面的示例创建 xml 类型变量并将架构集合与其关联。该示例中指定的架构集合已导入 AdventureWorks 数据库。

DECLARE @x xml (Production.ProductDescriptionSchemaCollection) 

B. 创建具有一个 xml 类型列的表并指定该列的架构

下面的示例创建具有一个 xml 类型列的表并指定该列的架构:

CREATE TABLE T1(
 Col1 int, 
 Col2 xml (Production.ProductDescriptionSchemaCollection)) 

C. 将 xml 类型参数传递到存储过程

下面的示例将 xml 类型参数传递到存储过程并指定该变量的架构:

CREATE PROCEDURE SampleProc 
  @ProdDescription xml (Production.ProductDescriptionSchemaCollection) 
AS 

注意有关 XML 架构集合的以下事项:

  • XML 架构集合只有在通过创建 XML 架构集合注册该集合的数据库中才可用。
  • 如果将字符串转换为类型化的 xml 数据类型,分析还将根据指定集合中的 XML 架构命名空间执行验证和键入。
  • 可以将类型化的 xml 数据类型转换为非类型化的 xml 数据类型,反之亦然。

有关在 SQL Server 中生成 XML 的其他方法的详细信息,请参阅生成 XML 实例。XML 生成后,可以分配给 xml 数据类型变量,也可以存储在 xml 类型列中以进行其他处理。

在数据类型层次结构中,xml 数据类型显示在 sql_variant 和用户定义类型之下、所有内置类型之上。

D. 指定用于约束类型化的 xml 列的方面

对于类型化的 xml 列,可以约束每列仅允许存储每个实例的单独的顶级元素。可以在创建了表以后通过指定可选的 DOCUMENT 方面来进行此操作,如以下示例中所示:

CREATE TABLE T(Col1 xml 
   (DOCUMENT Production.ProductDescriptionSchemaCollection))
GO
DROP TABLE T
GO

默认情况下,类型化的 xml 列中存储的实例存储为 XML 内容(而非 XML 文档)。这允许存储以下内容:

  • 零个或多个顶级元素
  • 顶级元素中的文本节点

还可以通过添加 CONTENT 方面显式指定此行为,如以下示例中所示:

CREATE TABLE T(Col1 xml(CONTENT Production.ProductDescriptionSchemaCollection))
GO -- Default

请注意,可以在定义 xml 类型(类型化的 xml)的任何位置指定可选的 DOCUMENT/CONTENT 方面。例如,创建类型化的 xml 变量时,可以添加 DOCUMENT/CONTENT 方面,如下所示:

declare @x xml (DOCUMENT Production.ProductDescriptionSchemaCollection)

请参阅

概念

生成 XML 实例
XML 数据修改语言 (XML DML)
xml 数据类型
示例 XML 应用程序

其他资源

XML 数据类型方法

帮助和信息

获取 SQL Server 2005 帮助