sql:variable() 函数 (XQuery)

显示 XQuery 表达式内包含 SQL 关系值的变量。

语法

sql:variable("variableName") as xdt:anyAtomicType?

注释

如主题在 XML 内部绑定关系数据中所述,当使用 XML 数据类型方法在 XQuery 内显示关系值时,可以使用此函数。

例如,使用 query() 方法对存储在 xml 数据类型变量或列中的 XML 实例指定查询。有时,您可能还希望查询使用 Transact-SQL 变量或参数中的值同时引入关系数据和 XML 数据。若要实现此目的,请使用 sql:variable 函数。

SQL 值将映射到相应的 XQuery 值,其类型将为 XQuery 基类型,等效于相应的 SQL 类型。

仅可在 XML-DML 插入语句源表达式的上下文中引用 xml 实例,否则无法引用 xml 类型的值或公共语言运行时 (CLR) 用户定义类型的值。

示例

A. 使用 sql:variable() 函数将 Transact-SQL 变量值放到 XML 中

以下示例构造由下列值组成的 XML 实例:

  • 非 XML 列中的值 (ProductID)。sql:column() 函数用于在 XML 中绑定此值。

  • 另一个表中非 XML 列中的值 (ListPrice)。同样,sql:column() 用于在 XML 中绑定此值。

  • Transact-SQL 变量中的值 (DiscountPrice)。sql:variable() 方法用于将此值绑定到 XML。

  • xml 类型列中的值 (ProductModelName),以使查询更加有趣。

以下是查询语句:

DECLARE @price money

SET @price=2500.00
SELECT ProductID, Production.ProductModel.ProductModelID,CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";

       <Product 
           ProductID="{ sql:column("Production.Product.ProductID") }"
           ProductModelID= "{ sql:column("Production.Product.ProductModelID") }"
           ProductModelName="{/pd:ProductDescription[1]/@ProductModelName }"
           ListPrice="{ sql:column("Production.Product.ListPrice") }"
           DiscountPrice="{ sql:variable("@price") }"
        />') 
FROM Production.Product 
JOIN Production.ProductModel
ON Production.Product.ProductModelID = Production.ProductModel.ProductModelID
WHERE ProductID=771

请注意上述查询的以下方面:

  • query() 方法中的 XQuery 构造 XML。

  • namespace 关键字用于定义 XQuery Prolog 中的命名空间前缀。执行此操作的原因为 ProductModelName 属性值是从 CatalogDescription xml 类型列(具有与其关联的架构)中检索的。

结果如下:

<Product ProductID="771" ProductModelID="19" 
         ProductModelName="Mountain 100" 
         ListPrice="3399.99" DiscountPrice="2500" />