次の方法で共有


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-DML insert ステートメントのソース式のコンテキストでのみ、 xml インスタンスを参照できます。それ以外の場合は、 xml または共通言語ランタイム (CLR) ユーザー定義型の値を参照することはできません。

A. sql:variable() 関数を使用して Transact-SQL 変数の値を XML に取り込む

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

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

  • 他のテーブルの 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 で名前空間プレフィックスを定義するために使用されます。 これは、スキーマが関連付けられているCatalogDescription xml型の列からProductModelName属性値が取得されるためです。

結果を次に示します。

<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)