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 INSERT
pernyataan , 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
, , AUTO
atau 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"/>