sql:variable() 函数 (XQuery)

显示 XML 数据实例内包含 SQL 关系值的变量。

语法

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

备注

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

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

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

在 SQL Server 2005 中,不能引用 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" />

请参阅

参考

SQL Server XQuery 扩展函数

概念

类型化与非类型化的 XML
xml 数据类型
生成 XML 实例
XML 数据修改语言 (XML DML)

其他资源

XML 数据类型方法

帮助和信息

获取 SQL Server 2005 帮助