次の方法で共有


sql:variable() 関数 (XQuery)

SQL リレーショナル値を含む変数を XQuery 式内部に公開します。

構文

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

説明

XML データ内部のリレーショナル データのバインド」で説明したように、XML データ型のメソッドを使用して XQuery 内部にリレーショナル値を公開する場合は、この関数を使用できます。

たとえば、xml データ型の変数や列に格納された XML インスタンスに対するクエリを指定するには、query() メソッドを使用します。 また、場合によっては、リレーショナル データと XML データを一緒にするために、Transact-SQL 変数の値 (パラメーター) をクエリで使用することもできます。 これを行うには、sql:variable 関数を使用します。

SQL 値は、対応する XQuery 値にマップされ、その型は対応する SQL 型に相当する XQuery 基本データ型になります。

xml インスタンスは XML DML 挿入ステートメントのソース式のコンテキストでのみ参照できます。それ以外の場合は、xml 型または共通言語ランタイム (CLR) ユーザー定義型の値を参照できません。

使用例

A. Transact-SQL 変数の値を XML にする sql:variable() 関数の使用

次の例では、次の値で構成される XML インスタンスを構築します。

  • XML 以外の列の値 (ProductID)。 XML にこの値をバインドするために、sql:column() 関数を使用します。

  • 他のテーブルの XML 以外の列の値 (ListPrice)。 ここでも、XML にこの値をバインドするために、sql:column() を使用します。

  • Transact-SQL 変数の値 (DiscountPrice)。 XML にこの値をバインドするために、sql:variable() メソッドを使用します。

  • さらに、このクエリでは、説明を目的として 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 が構築されます。

  • XQuery プロローグで、namespace キーワードを使用して名前空間プレフィックスが定義されています。 これは、関連付けられたスキーマを持つ xml 型の CatalogDescription 列から ProductModelName 属性値を取得するためです。

次に結果を示します。

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

関連項目

参照

SQL Server XQuery 拡張関数

概念

型指定された XML と型指定されていない XML の比較

XML データ (SQL Server)

XML データのインスタンスの作成

XML DML (XML データ変更言語)

その他の技術情報

xml データ型のメソッド