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 值,而且其類型會是相當於對應 SQL 類型的 XQuery 基底類型。
您只能參考 XML-DML insert 語句之來源表達式內容中的 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 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)