Bagikan melalui


UNTUK XML (SQL Server)

Berlaku untuk: SQL ServerAzure SQL Database Azure SQL Managed Instance

Kueri SELECT mengembalikan hasil sebagai set baris. Anda dapat secara opsional mengambil hasil formal kueri SQL sebagai XML dengan menentukan FOR XML klausa dalam kueri. Klausa FOR XML dapat digunakan dalam kueri tingkat atas dan dalam subkueri. Klausa tingkat FOR XML atas hanya dapat digunakan dalam SELECT pernyataan. Dalam subkueri, FOR XML dapat digunakan dalam INSERTpernyataan , UPDATE, dan DELETE . FOR XML juga dapat digunakan dalam pernyataan penugasan.

FOR XML Dalam klausa, Anda menentukan salah satu mode ini:

  • RAW
  • AUTO
  • EXPLICIT
  • PATH

Mode ini RAW menghasilkan elemen tunggal <row> per baris dalam set baris yang dikembalikan oleh SELECT pernyataan. Anda dapat membuat hierarki XML dengan menulis kueri berlapis FOR XML .

Mode ini AUTO menghasilkan bersarang dalam XML yang dihasilkan dengan menggunakan heuristik berdasarkan cara SELECT pernyataan ditentukan. Anda memiliki kontrol minimal atas bentuk XML yang dihasilkan. Kueri berlapis FOR XML dapat ditulis untuk menghasilkan hierarki XML di luar bentuk XML yang dihasilkan oleh AUTO heuristik mode.

Mode ini EXPLICIT memungkinkan lebih banyak kontrol atas bentuk XML. Anda dapat mencampur atribut dan elemen sesuai kemauan dalam memutuskan bentuk XML. Ini memerlukan format tertentu untuk kumpulan baris yang dihasilkan yang dihasilkan karena eksekusi kueri. Format set baris ini kemudian dipetakan ke dalam bentuk XML. Kekuatan EXPLICIT mode adalah mencampur atribut dan elemen sesering mungkin, membuat pembungkus dan properti kompleks berlapis, membuat nilai yang dipisahkan ruang (misalnya, OrderID atribut mungkin memiliki daftar nilai ID pesanan), dan konten campuran.

Namun, kueri mode penulisan EXPLICIT bisa rumit. Anda dapat menggunakan beberapa kemampuan baru FOR XML , seperti menulis kueri berlapis FOR XML RAW, , AUTOatau PATH mode dan TYPE direktif, alih-alih menggunakan EXPLICIT mode untuk menghasilkan hierarki. Kueri berlapis FOR XML dapat menghasilkan XML apa pun yang dapat Anda hasilkan dengan menggunakan mode .EXPLICIT Untuk informasi selengkapnya, lihat Menggunakan Kueri XML Berlapis dan Direktif TYPE di Untuk Kueri XML.

Mode ini PATH bersama dengan kemampuan kueri berlapis FOR XML memberikan fleksibilitas EXPLICIT mode dengan cara yang lebih sederhana.

Mode ini hanya berlaku untuk eksekusi kueri yang ditetapkan. Kueri berikutnya tidak memengaruhi hasil kueri berikutnya.

FOR XML tidak valid untuk pilihan apa pun yang digunakan dengan FOR BROWSE klausa.

Contoh

Pernyataan berikut SELECT mengambil informasi dari Sales.Customer tabel dan Sales.SalesOrderHeader dalam AdventureWorks2022 database. Kueri ini menentukan mode dalam FOR XML klausaAUTO:

USE AdventureWorks2022;
GO

SELECT Cust.CustomerID,
    OrderHeader.CustomerID,
    OrderHeader.SalesOrderID,
    OrderHeader.STATUS
FROM Sales.Customer Cust
INNER JOIN Sales.SalesOrderHeader OrderHeader
    ON Cust.CustomerID = OrderHeader.CustomerID
FOR XML AUTO;

Klausa FOR XML dan nama server

SELECT Saat pernyataan dengan FOR XML klausul menentukan nama empat bagian dalam kueri, nama server tidak dikembalikan dalam dokumen XML yang dihasilkan saat kueri dijalankan di komputer lokal. Namun, nama server dikembalikan sebagai nama empat bagian saat kueri dijalankan di server jaringan.

Misalnya, pertimbangkan kueri ini:

SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person
FOR XML AUTO;

Server lokal: Saat ServerName adalah server lokal, kueri mengembalikan teks berikut:

<AdventureWorks2022.Person.Person LastName="Achong" />

Server jaringan: Saat ServerName adalah server jaringan, kueri mengembalikan teks berikut:

<ServerName.AdventureWorks2022.Person.Person LastName="Achong" />

Hindari ambiguitas: Potensi ambiguitas ini dapat dihindari dengan menentukan alias ini:

SELECT TOP 1 LastName
FROM ServerName.AdventureWorks2022.Person.Person x
FOR XML AUTO;

Sekarang kueri yang tidak ambigu mengembalikan teks berikut:

<x LastName="Achong"/>