sql:variable() 函數 (XQuery)
在 XML 資料執行個體中公開含有 SQL 關聯式值的變數。
語法
sql:variable("variableName") as xdt:anyAtomicType?
備註
如<在 XML 中繫結關聯式資料>主題中所述,您可以在使用 XML 資料類型方法來公開 XML 內的關聯值時,使用此函數。
例如,您可以使用 query() 方法,針對儲存在 xml 資料類型變數或資料行中的 XML 執行個體來指定查詢。有時候,您也會想要讓您的查詢作業使用 Transact-SQL 變數或參數中的值,以合併關聯式資料及 XML 資料。若要這麼做,就要使用 sql:variable 函數。
SQL 值將會對應至一個相對應的 XQuery 值,且其類型會是等同於相對應 SQL 類型的 XQuery 基底類型。
在 SQL Server 2005 中,您不能參考 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" />
請參閱
參考
概念
具類型與不具類型的 XML
XML 資料類型
產生 XML 執行個體
XML 資料修改語言 (XML DML)