次の方法で共有


例: HIDE ディレクティブの指定

この例では、 HIDE ディレクティブの使用方法を示します。 このディレクティブは、クエリによって返されるユニバーサル テーブル内の行を並べ替える属性をクエリから返すが、最終的に生成される XML ドキュメントでその属性を使用しない場合に便利です。

このクエリは、次の XML を構築します。

<ProductModel ProdModelID="19" Name="Mountain-100">  
  <Summary>  
    <SummaryDescription>  
           <Summary> element from XML stored in CatalogDescription column  
    </SummaryDescription>  
  </Summary>  
</ProductModel>  

このクエリでは、必要な XML が生成されます。 このクエリでは、列名のタグ値として 1 と 2 の 2 つの列グループが識別されます。

このクエリでは、xmlデータ型の query() メソッド (xml データ型) を使用して、xml 型の CatalogDescription 列に対してクエリを実行し、概要の説明を取得します。 また、このクエリでは、xmlデータ型の value() メソッド (xml データ型) を使用して、CatalogDescription 列から ProductModelID 値を取得します。 この値は、結果の XML では必要ありませんが、結果の行セットを並べ替えるために必要です。 したがって、列名 [Summary!2!ProductModelID!HIDE]には HIDE ディレクティブが含まれます。 この列が SELECT ステートメントに含まれていない場合は、xml 型の[ProductModel!1!ProdModelID][Summary!2!SummaryDescription]で行セットを並べ替える必要があり、ORDER BY で xml 型の列を使用することはできません。 したがって、追加の [Summary!2!ProductModelID!HIDE] 列が追加され、ORDER BY 句で指定されます。

USE AdventureWorks2012;  
GO  
SELECT  1 as Tag,  
        0 as Parent,  
        ProductModelID     as [ProductModel!1!ProdModelID],  
        Name               as [ProductModel!1!Name],  
        NULL               as [Summary!2!ProductModelID!hide],  
        NULL               as [Summary!2!SummaryDescription]  
FROM    Production.ProductModel  
WHERE   CatalogDescription is not null  
UNION ALL  
SELECT  2 as Tag,  
        1 as Parent,  
        ProductModelID,  
        Name,  
        CatalogDescription.value('  
         declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
       (/PD:ProductDescription/@ProductModelID)[1]', 'int'),  
        CatalogDescription.query('  
         declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
         /pd:ProductDescription/pd:Summary')  
FROM    Production.ProductModel  
WHERE   CatalogDescription is not null  
ORDER BY [ProductModel!1!ProdModelID],[Summary!2!ProductModelID!hide]  
FOR XML EXPLICIT  
go  

結果を次に示します。

<ProductModel ProdModelID="19" Name="Mountain-100">  
  <Summary>  
    <SummaryDescription>  
      <pd:Summary xmlns:pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" xmlns="">  
        <p1:p xmlns:p1="http://www.w3.org/1999/xhtml">Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame, super-smooth front suspension, and traction for all terrain. </p1:p>  
      </pd:Summary>  
    </SummaryDescription>  
  </Summary>  
</ProductModel>  

こちらもご覧ください

FOR XML で EXPLICIT モードを使用する