Bagikan melalui


Contoh: Menentukan ID dan Direktif IDREFS

Atribut elemen dapat ditentukan sebagai ID atribut jenis, dan IDREFS atribut kemudian dapat digunakan untuk merujuknya. Ini memungkinkan tautan intra-dokumen dan mirip dengan kunci utama dan hubungan kunci asing dalam database relasional.

Contoh ini menggambarkan bagaimana arahan ID dan IDREFS dapat digunakan untuk membuat atribut dari jenis ID dan IDREFS. Karena ID tidak boleh berupa nilai bilangan bulat, nilai ID dalam contoh ini dikonversi. Dengan kata lain, mereka diberi tipe khusus. Awalan digunakan untuk nilai-nilai ID.

Asumsikan bahwa Anda ingin membuat XML seperti yang diperlihatkan dalam hal berikut:

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

Atribut SalesOrderIDList dari elemen <Customer> adalah atribut multinilai yang mengacu pada atribut SalesOrderID dari elemen <SalesOrder>. Untuk membuat tautan ini, atribut SalesOrderID harus dideklarasikan dengan jenis ID, dan atribut SalesOrderIDList dari elemen <Customer> harus dideklarasikan dengan jenis IDREFS. Karena pelanggan dapat meminta beberapa pesanan, jenisnya IDREFS digunakan.

Elemen jenis IDREFS juga memiliki lebih dari satu nilai. Oleh karena itu, Anda harus menggunakan klausa pilih terpisah yang akan menggunakan kembali informasi tag, induk, dan kolom kunci yang sama. Kemudian ORDER BY harus memastikan bahwa urutan baris yang membentuk IDREFS nilai muncul dikelompokkan bersama-sama di bawah elemen induknya.

Ini adalah kueri yang menghasilkan XML yang Anda inginkan. Kueri menggunakan perintah ID dan IDREFS untuk menggantikan tipe data dalam nama kolom (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;  

Lihat Juga

Gunakan Mode EKSPLISIT dengan FOR XML