XQuery Extension Functions - sql:variable()
適用対象:SQL Server
SQL リレーショナル値を含む変数を XQuery 式内部に公開します。
構文
sql:variable("variableName") as xdt:anyAtomicType?
解説
「XML 内の リレーショナル データのバインド」のトピックで説明されているように、 XML データ型メソッド を使用して XQuery 内でリレーショナル値を公開するときに、この関数を使用できます。
たとえば、 query() メソッド は、 xml データ型の変数または列に格納されている XML インスタンスに対してクエリを指定するために使用されます。 また、クエリで Transact-SQL 変数またはパラメーターの値を使用して、リレーショナル データと XML データをまとめる必要がある場合もあります。 これを行うには、 sql:variable 関数を使用します。
SQL 値は対応する XQuery 値にマップされ、その型は対応する SQL 型と同等の XQuery 基本型になります。
XML インスタンスは、XML-DML insert ステートメントのソース式のコンテキストでのみ参照できます。それ以外の場合は、xml 型または共通言語ランタイム (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
上のクエリに関して、次の点に注意してください。
メソッド内の XQuery によって
query()
XML が構築されます。キーワードは
namespace
、 XQuery Prolog で名前空間プレフィックスを定義するために使用されます。 これは、属性値がProductModelName
、関連付けられたスキーマをCatalogDescription xml
持つ型列から取得されるためです。
結果を次に示します。
<Product ProductID="771" ProductModelID="19"
ProductModelName="Mountain 100"
ListPrice="3399.99" DiscountPrice="2500" />
参照
XQuery 拡張関数のSQL Server
型指定された XML と型指定されていない XML の比較
XML データ (SQL Server)
XML データのインスタンスの作成
xml データ型メソッド
XML データ変更言語 (XML DML)