在 XML 数据内部绑定关系数据

可以对 xml 数据类型的变量或列指定 XML 数据类型方法。例如,query() 方法(xml 数据类型)将针对 XML 实例执行指定的 XQuery。以这种方式构造 XML 时,您可能想要从一个非 XML 类型列或 Transact-SQL 变量引入一个值。此过程称为在 XML 内部绑定关系数据。

若要在 XML 内部绑定非 XML 关系数据,SQL Server 数据库引擎提供了下列伪函数:

无论什么时候想要显示 XML 内的关系值,都可以将这些函数与 xml 数据类型方法一起使用。

不能使用这些函数引用 xml、CLR 用户定义类型、datetime、smalldatetime、text、ntext、sql_variant 和 image 类型的列或变量中的数据。

而且,此绑定用于只读目的。也就是说,不能在使用这些函数的列中写入数据。例如,sql:variable("@x")="某一表达式" 是不允许的。

示例:使用 sql:variable() 的跨域查询

本例显示 sql:variable() 如何使应用程序能够将查询参数化,其中使用一个 SQL 变量 @isbn 来传入 ISBN。通过将常量替换为 sql:variable(),可以使用该查询来搜索任何 ISBN,而不仅是 ISBN 为 0-7356-1588-2 的图书。

DECLARE @isbn varchar(20)
SET     @isbn = '0-7356-1588-2'
SELECT  xCol
FROM    T
WHERE   xCol.exist ('/book/@ISBN[. = sql:variable("@isbn")]') = 1

可以用相似的方式使用 sql:column(),它提供了其他好处。可以使用列的索引来提高效率,这由基于开销的查询优化器决定。另外,计算列可以存储提升的属性。

请参阅

概念

其他资源