다음을 통해 공유


예: ID 및 IDREFS 지시문 지정

요소 특성을 형식 특성으로 ID 지정할 수 있으며 IDREFS 해당 특성을 사용하여 참조할 수 있습니다. 이렇게 하면 문서 내 링크를 사용할 수 있으며 관계형 데이터베이스의 기본 키 및 외래 키 관계와 유사합니다.

이 예제에서는 IDIDREFS 지시문을 사용하여 IDIDREFS 형식의 특성을 만드는 방법을 보여 줍니다. ID는 정수 값일 수 없으므로 이 예제의 ID 값은 변환됩니다. 즉, 특정한 이미지로 정형화되었습니다. 접두사는 ID 값에 사용됩니다.

다음과 같이 XML을 생성한다고 가정합니다.

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

SalesOrderIDList 특성을 가진 <Customer> 요소는 <SalesOrder> 요소의 SalesOrderID 특성을 참조하는 다중값 특성입니다. 이 링크를 설정하려면 SalesOrderID 형식의 특성이 선언되어야 하며, SalesOrderIDList 요소의 <Customer> 특성은 IDREFS 형식으로 선언되어야 합니다. 고객이 여러 주문을 요청할 수 있으므로 형식이 IDREFS 사용됩니다.

형식의 IDREFS 요소에도 두 개 이상의 값이 있습니다. 따라서 동일한 태그, 부모 및 키 열 정보를 다시 사용하는 별도의 select 절을 사용해야 합니다. ORDER BY 그런 다음 값을 구성하는 IDREFS 행의 시퀀스가 부모 요소 아래에 그룹화되어 표시되는지 확인해야 합니다.

원하는 XML을 생성하는 쿼리입니다. 쿼리는 IDIDREFS 지시문을 사용하여 열 이름(SalesOrder!2!SalesOrderID!ID, Customer!1!SalesOrderIDList!IDREFS)의 형식을 덮어씁니다.

USE AdventureWorks2012;  
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.CustomerIDORDER BY [Customer!1!CustomerID] ,  
         [SalesOrder!2!SalesOrderID!ID],  
         [Customer!1!SalesOrderIDList!IDREFS]  
FOR XML EXPLICIT;  

또한 참조하십시오

FOR XML에서 EXPLICIT 모드 사용