Contoh: Tentukan direktif ID dan IDREFS
Berlaku untuk: SQL ServerAzure SQL Database Azure 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;