次の方法で共有


例: ID ディレクティブと IDREFS ディレクティブを指定する

適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance

要素の属性は、 ID 型の属性として指定することができます。さらに、この属性を参照する IDREFS 属性を使用できます。 これにより、ドキュメント内のリンク作成が可能になります。これは、リレーショナル データベースにおける主キーと外部キーのリレーションシップに似ています。

この例では、 ID ディレクティブと IDREFS ディレクティブを使用して、 ID 型と IDREFS 型の属性を作成する方法を示します。 ID は整数値にできないので、この例では ID 値を変換します。 つまり、型キャストを行っています。 ID 値にはプレフィックスを使用します。

次のような XML を生成するとします。

<Customer CustomerID="C1" SalesOrderIDList=" O11 O22 O33..." >
    <SalesOrder SalesOrderID="O11" OrderDate="..." />
    <SalesOrder SalesOrderID="O22" OrderDate="..." />
    <SalesOrder SalesOrderID="O33" OrderDate="..." />
    ...
</Customer>

<Customer> 要素の SalesOrderIDList 属性は、複数の値を指定できる属性であり、<SalesOrder> 要素の SalesOrderID 属性を参照しています。 このリンクを確立するには、SalesOrderID 属性を ID 型として宣言し、<Customer> 要素の SalesOrderIDList 属性を IDREFS 型として宣言する必要があります。 各顧客が複数の注文を発注することが考えられるので、 IDREFS 型を使用しています。

IDREFS 型の要素も、複数の値を保持できます。 このため、別の SELECT 句を使用して、同じタグ、親、およびキー列の情報を再利用する必要があります。 さらに、 ORDER BY IDREFS 値を構成する一連の行が、それぞれの親要素の直後にグループ化された状態で表示されるように、 句を指定します。

求める XML を生成するクエリを次に示します。 このクエリでは、 ID ディレクティブと IDREFS ディレクティブを使用して、指定した列名の型を上書きしています (SalesOrder!2!SalesOrderID!IDCustomer!1!SalesOrderIDList!IDREFS)。

USE AdventureWorks2022;
GO
SELECT  1 as Tag,
        0 as Parent,
        C.CustomerID   [Customer!1!CustomerID],
        NULL           [Customer!1!SalesOrderIDList!IDREFS],
        NULL           [SalesOrder!2!SalesOrderID!ID],
        NULL           [SalesOrder!2!OrderDate]
FROM   Sales.Customer C

UNION ALL
SELECT  1 as Tag,
        0 as Parent,
        C.CustomerID,
        'O-'+CAST(SalesOrderID as varchar(10)),
        NULL,
        NULL
FROM   Sales.Customer AS C
INNER JOIN Sales.SalesOrderHeader AS SOH
    ON  C.CustomerID = SOH.CustomerID

UNION ALL
SELECT 2 as Tag,
       1 as Parent,
        C.CustomerID,
        NULL,
        'O-'+CAST(SalesOrderID as varchar(10)),
        OrderDate
FROM   Sales.Customer AS C
INNER JOIN Sales.SalesOrderHeader AS SOH
    ON  C.CustomerID = SOH.CustomerID
ORDER BY [Customer!1!CustomerID] ,
         [SalesOrder!2!SalesOrderID!ID],
         [Customer!1!SalesOrderIDList!IDREFS]
FOR XML EXPLICIT;

関連項目