예제: ID 및 IDREFS 지시어 지정Example: Specifying the ID and IDREFS Directives

요소 특성을 ID 유형의 특성으로 지정한 다음 IDREFS 특성을 사용하여 이 특성을 참조할 수 있습니다.An element attribute can be specified as an ID type attribute, and the IDREFS attribute can then be used to refer to it. 이러한 방식은 문서 간 연결을 설정하며 관계형 데이터베이스의 기본 키 및 외래 키 관계와 비슷합니다.This enables intra-document links and is similar to the primary key and foreign key relationships in relational databases.

이 예에서는 IDIDREFS 지시어를 사용하여 IDIDREFS 유형의 특성을 만드는 방법을 보여 줍니다.This example illustrates how the ID and IDREFS directives can be used to create attributes of ID and IDREFS types. ID는 정수 값일 수 없기 때문에 이 예에서는 ID 값이 변환됩니다.Because IDs cannot be integer values, the ID values in this example are converted. 즉, 다른 유형으로 캐스팅됩니다.In other words, they are type casted. ID 값에는 접두사가 사용됩니다.Prefixes are used for the ID values.

다음과 같이 XML을 생성한다고 가정해 보십시오.Assume that you want to construct XML as shown in the following:

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

< SalesOrderIDList > 요소의 Customer 특성은 < SalesOrderID > 요소의 SalesOrder 특성을 참조하는 다중 값 특성입니다.The SalesOrderIDList attribute of the < Customer > element is a multivalued attribute that refers to the SalesOrderID attribute of the < SalesOrder > element. 이 연결을 구성하려면 SalesOrderID 특성이 ID 유형으로 선언되어야 하며 <Customer> 요소의 SalesOrderIDList 특성이 IDREFS 유형으로 선언되어야 합니다.To establish this link, the SalesOrderID attribute must be declared of ID type, and the SalesOrderIDList attribute of the < Customer> element must be declared of IDREFS type. 한 고객이 여러 개의 주문을 요청할 수 있으므로 IDREFS 유형이 사용됩니다.Because a customer can request several orders, the IDREFS type is used.

IDREFS 유형의 요소에는 또한 두 개 이상의 값이 포함됩니다.Elements of IDREFS type also have more than one value. 따라서 같은 태그, 부모 및 키 열 정보를 다시 사용하는 별개의 SELECT 절을 사용해야 합니다.Therefore, you have to use a separate select clause that will reuse the same tag, parent, and key column information. 그런 다음 ORDER BY 에서 IDREFS 값을 구성하는 행 시퀀스가 해당 부모 요소 아래에 함께 그룹화되어 표시되도록 해야 합니다.The ORDER BY then has to ensure that the sequence of rows that make up the IDREFS values appears grouped together under their parent element.

이 쿼리는 원하는 XML을 생성합니다.This is the query that produces the XML you want. 이 쿼리는 IDIDREFS 지시어를 사용하여 열 이름(SalesOrder!2!SalesOrderID!ID, Customer!1!SalesOrderIDList!IDREFS)에 있는 유형을 덮어씁니다.The query uses the ID and IDREFS directives to overwrite the types in the column names (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;  

참고 항목See Also

FOR XML에서 EXPLICIT 모드 사용Use EXPLICIT Mode with FOR XML