Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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;