共用方式為


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

請參閱

參考

SQL Server XQuery 擴充函數

概念

具類型與不具類型的 XML
XML 資料類型
產生 XML 執行個體
XML 資料修改語言 (XML DML)

其他資源

xml 資料類型方法

說明及資訊

取得 SQL Server 2005 協助