XQuery 扩展函数 - sql:variable()
适用范围:SQL Server
显示在 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 insert 语句的源表达式上下文中引用 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" />
另请参阅
SQL Server XQuery 扩展函数
类型化的 XML 与非类型化的 XML 的比较
XML 数据 (SQL Server)
创建 XML 数据的实例
xml 数据类型方法
XML 数据修改语言 (XML DML)