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