Contoh: Tentukan direktif ID dan IDREFS

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Atribut elemen dapat ditentukan sebagai atribut jenis ID , dan atribut IDREFS 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 direktif ID dan IDREFS dapat digunakan untuk membuat atribut jenis ID dan IDREFS . Karena ID tidak boleh berupa nilai bilangan bulat, nilai ID dalam contoh ini dikonversi. Dengan kata lain, jenisnya dilemparkan. Awalan digunakan untuk 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<Customer> elemen adalah atribut multinilai yang mengacu pada SalesOrderID atribut <SalesOrder> elemen . Untuk membuat tautan ini, SalesOrderID atribut harus dideklarasikan dari ID jenis, dan SalesOrderIDList atribut <Customer> elemen harus dideklarasikan dari IDREFS jenis. 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 nilai IDREFS muncul dikelompokkan bersama-sama di bawah elemen induknya.

Ini adalah kueri yang menghasilkan XML yang Anda inginkan. Kueri menggunakan arahan ID dan IDREFS untuk menimpa jenis dalam nama kolom (SalesOrder!2!SalesOrderID!ID, Customer!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;

Baca juga