Share via


sql:variable() 函數 (XQuery)

在 XQuery 運算式內公開含有 SQL 關聯值的變數。

語法

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

備註

如<在 XML 資料中繫結關聯式資料>主題中所述,您可以在使用 XML 資料類型方法來公開 XQuery 內的關聯值時,使用此函數。

例如,您可以使用 query() 方法,針對儲存在 xml 資料類型變數或資料行中的 XML 執行個體來指定查詢。有時候,您也會想要讓您的查詢作業使用 Transact-SQL 變數或參數中的值,以合併關聯式資料及 XML 資料。若要這麼做,就要使用 sql:variable 函數。

SQL 值將會對應至一個相對應的 XQuery 值,且其類型會是等同於相對應 SQL 類型的 XQuery 基底類型。

您只能參考 XML-DML 插入陳述式之來源運算式內容中的 xml 執行個體,否則您將無法參考 xml 類型或 Common Language Runtime (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 初構中定義命名空間前置詞。因為 CatalogDescription xml 類型資料行具有相關聯的結構描述,可從中擷取 ProductModelName 屬性值,所以可以完成此設定。

以下是結果:

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