WEB开发网
开发学院数据库MSSQL Server Microsoft SQL Server 2005 中的 XML 支持(2) 阅读

Microsoft SQL Server 2005 中的 XML 支持(2)

 2007-05-13 09:26:32 来源:WEB开发网   
核心提示: 如果编译器不能确定在运行时是否保证有 singleton 元素,则需要 singleton 元素的定位步骤、函数参数和运算符(例如,Microsoft SQL Server 2005 中的 XML 支持(2)(2),eq)就会返回错误,这种问题常常因非类型化的数据而产生,如下面的&ldqu

如果编译器不能确定在运行时是否保证有 singleton 元素,则需要 singleton 元素的定位步骤、函数参数和运算符(例如,eq)就会返回错误。这种问题常常因非类型化的数据而产生。例如,查找属性需要 singleton 父元素;顺序选择单个的父节点就足够了。

例:value() 方法中的类型检查

下面的查询是在非类型化的 XML 列中进行的,它需要 //author/last-name 中的顺序规范,因为 value() 方法需要 singleton 节点作为第一个参数。如果没有,则编译器就不能确定在运行时是否只出现一个<last-name> 节点。

SELECT xCol.value('(//author/last-name)[1]', 'nvarchar(50)') LastName
FROM  docs

通过求 node()-value() 组合的值来提取属性值可以不需要顺序规范,如下一个示例所示。

例:已知的 singleton 元素

如下所示的 nodes() 方法为每个<book> 元素生成单独的行。对<book> 节点求值的 value() 方法提取 @genre 的值,@genre 作为一个属性,是 singleton 元素。

SELECT nref.value('@genre', 'varchar(max)') LastName
FROM  docs CROSS APPLY xCol.nodes('//book') AS R(nref)
跨域查询

如果数据驻留在关系数据类型的列和 XML 数据类型的列的组合中,就可能需要编写查询来组合关系数据处理和 XML 数据处理。通过使用带有 TYPE 指令的 FOR XML,可以将关系列和 XML 列中的数据转换成 XML 数据类型的实例,并使用 XQuery 对其进行查询。相反地,可以从 XML 值生成行集,并且使用 T-SQL 来对其进行查询,如下面的“从 XML 数据生成行集”一节所示。

编写跨域查询的一个更加方便和有效的方法是,使用 SQL 变量的值,或者使用 XQuery 或 XML 数据修改表达式中的列:

上一页  1 2 3 4 5 6 7  下一页

Tags:Microsoft SQL Server

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接