在 XML 数据内部绑定关系数据
可以对 xml 数据类型的变量或列指定 XML 数据类型方法。 例如,query() 方法(xml 数据类型)将针对 XML 实例执行指定的 XQuery。 以这种方式构造 XML 时,您可能想要从一个非 XML 类型列或 Transact-SQL 变量引入一个值。 此过程称为在 XML 内部绑定关系数据。
若要在 XML 内部绑定非 XML 关系数据,SQL Server 数据库引擎提供了下列伪函数:
sql:column() 函数 (XQuery) 允许您在 XQuery 或 XML DML 表达式中使用来自关系列的值。
sql:variable() 函数 (XQuery) . 允许您在 XQuery 或 XML DML 表达式中使用 SQL 变量的值。
无论什么时候想要显示 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(),它提供了其他好处。 可以使用列的索引来提高效率,这由基于开销的查询优化器决定。 另外,计算列可以存储提升的属性。