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" />