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.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Database SQL di Microsoft Fabric
Contoh berikut menunjukkan cara menghasilkan saudara kandung dengan menggunakan kueri mode OTOMATIS berlapis. Satu-satunya cara lain untuk menghasilkan XML tersebut adalah dengan menggunakan mode EKSPLISIT. Namun, ini bisa rumit.
Contoh
Kueri ini membangun XML yang menyediakan informasi pesanan penjualan. Ini termasuk yang berikut:
Informasi header pesanan penjualan,
SalesOrderID,SalesPersonID, danOrderDate.AdventureWorks2025menyimpan informasi ini dalamSalesOrderHeadertabel.Informasi detail pesanan penjualan. Ini termasuk satu atau beberapa produk yang dipesan, harga satuan, dan kuantitas yang dipesan. Informasi ini disimpan dalam
SalesOrderDetailtabel.Informasi tenaga penjual. Ini adalah tenaga penjual yang mengambil pesanan. Tabel
SalesPersonmenyediakanSalesPersonID. Untuk kueri ini, Anda harus menggabungkan tabel ini dengan tabelEmployeeuntuk menemukan nama tenaga penjual.
Dua kueri berbeda SELECT yang mengikuti menghasilkan XML dengan perbedaan kecil dalam bentuk.
Kueri pertama menghasilkan XML di mana <SalesPerson> dan <SalesOrderHeader> muncul sebagai anak saudara dari <SalesOrder>:
SELECT
(SELECT top 2 SalesOrderID, SalesPersonID, CustomerID,
(select top 3 SalesOrderID, ProductID, OrderQty, UnitPrice
from Sales.SalesOrderDetail
WHERE SalesOrderDetail.SalesOrderID =
SalesOrderHeader.SalesOrderID
FOR XML AUTO, TYPE)
FROM Sales.SalesOrderHeader
WHERE SalesOrderHeader.SalesOrderID = SalesOrder.SalesOrderID
for xml auto, type),
(SELECT *
FROM (SELECT SalesPersonID, EmployeeID
FROM Sales.SalesPerson, HumanResources.Employee
WHERE SalesPerson.SalesPersonID = Employee.EmployeeID) As
SalesPerson
WHERE SalesPerson.SalesPersonID = SalesOrder.SalesPersonID
FOR XML AUTO, TYPE)
FROM (SELECT SalesOrderHeader.SalesOrderID, SalesOrderHeader.SalesPersonID
FROM Sales.SalesOrderHeader, Sales.SalesPerson
WHERE SalesOrderHeader.SalesPersonID = SalesPerson.SalesPersonID
) as SalesOrder
ORDER BY SalesOrder.SalesOrderID
FOR XML AUTO, TYPE;
Di kueri sebelumnya, pernyataan terluar SELECT melakukan hal berikut:
Mengajukan query pada set data baris,
SalesOrder, yang ditentukan dalam klausaFROM. Hasilnya adalah XML dengan satu atau beberapa<SalesOrder>elemen.Menentukan mode
AUTOdan arahanTYPE.AUTOmode mengubah hasil kueri menjadi XML, dan direktifTYPEmengembalikan hasil sebagai jenis xml .Termasuk dua
SELECTpernyataan berlapis, yang dipisahkan oleh koma. BerlapisSELECTpertama mengambil informasi pesanan penjualan, header dan detail, dan pernyataan berlapisSELECTkedua mengambil informasi tenaga penjual.- Pernyataan
SELECTyang mengambilSalesOrderID,SalesPersonID, danCustomerIDmencakup pernyataan berlapisSELECT ... FOR XMLlain (dengan modusAUTOdan direktifTYPE) yang mengembalikan informasi detail pesanan penjualan.
- Pernyataan
Pernyataan SELECT yang mengambil informasi tenaga penjualan menjalankan query pada set baris, SalesPerson, yang dibuat dalam klausa FROM. Agar kueri FOR XML berfungsi, Anda harus memberikan nama untuk set baris anonim yang dihasilkan oleh klausa FROM. Dalam hal ini, nama yang disediakan adalah SalesPerson.
Ini adalah hasil parsial:
<SalesOrder>
<Sales.SalesOrderHeader SalesOrderID="43659" SalesPersonID="279" CustomerID="676">
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="776" OrderQty="1" UnitPrice="2024.9940" />
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="777" OrderQty="3" UnitPrice="2024.9940" />
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="778" OrderQty="1" UnitPrice="2024.9940" />
</Sales.SalesOrderHeader>
<SalesPerson SalesPersonID="279" EmployeeID="279" />
</SalesOrder>
...
Kueri berikut menghasilkan informasi pesanan penjualan yang sama, kecuali bahwa dalam XML yang dihasilkan, <SalesPerson> muncul sebagai saudara kandung dari <SalesOrderDetail>:
<SalesOrder>
<SalesOrderHeader ...>
<SalesOrderDetail .../>
<SalesOrderDetail .../>
...
<SalesPerson .../>
</SalesOrderHeader>
</SalesOrder>
<SalesOrder>
...
</SalesOrder>
Ini adalah pertanyaan:
SELECT SalesOrderID, SalesPersonID, CustomerID,
(select top 3 SalesOrderID, ProductID, OrderQty, UnitPrice
from Sales.SalesOrderDetail
WHERE SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID
FOR XML AUTO, TYPE),
(SELECT *
FROM (SELECT SalesPersonID, EmployeeID
FROM Sales.SalesPerson, HumanResources.Employee
WHERE SalesPerson.SalesPersonID = Employee.EmployeeID) As SalesPerson
WHERE SalesPerson.SalesPersonID = SalesOrderHeader.SalesPersonID
FOR XML AUTO, TYPE)
FROM Sales.SalesOrderHeader
WHERE SalesOrderID=43659 or SalesOrderID=43660
FOR XML AUTO, TYPE;
Ini adalah hasilnya:
<Sales.SalesOrderHeader SalesOrderID="43659" SalesPersonID="279" CustomerID="676">
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="776" OrderQty="1" UnitPrice="2024.9940" />
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="777" OrderQty="3" UnitPrice="2024.9940" />
<Sales.SalesOrderDetail SalesOrderID="43659" ProductID="778" OrderQty="1" UnitPrice="2024.9940" />
<SalesPerson SalesPersonID="279" EmployeeID="279" />
</Sales.SalesOrderHeader>
<Sales.SalesOrderHeader SalesOrderID="43660" SalesPersonID="279" CustomerID="117">
<Sales.SalesOrderDetail SalesOrderID="43660" ProductID="762" OrderQty="1" UnitPrice="419.4589" />
<Sales.SalesOrderDetail SalesOrderID="43660" ProductID="758" OrderQty="1" UnitPrice="874.7940" />
<SalesPerson SalesPersonID="279" EmployeeID="279" />
</Sales.SalesOrderHeader>
Karena direktif TYPE mengembalikan hasil kueri sebagai jenis xml , Anda bisa mengkueri XML yang dihasilkan dengan menggunakan berbagai metode tipe data xml . Untuk informasi selengkapnya, lihat Metode Tipe Data XML. Dalam kueri berikut, perhatikan hal berikut:
Kueri sebelumnya ditambahkan dalam
FROMklausa. Hasil kueri dikembalikan sebagai tabel.XmlColPerhatikan alias yang ditambahkan.Klausa
SELECTmenentukan XQuery yang dijalankan terhadapXmlColyang dikembalikan dalam klausaFROM. Metodequery()tipe data xml digunakan dalam menentukan XQuery. Untuk informasi selengkapnya, lihat Metode query() (Tipe Data xml).SELECT XmlCol.query('<Root> { /* } </Root>') FROM ( SELECT SalesOrderID, SalesPersonID, CustomerID, (select top 3 SalesOrderID, ProductID, OrderQty, UnitPrice from Sales.SalesOrderDetail WHERE SalesOrderDetail.SalesOrderID = SalesOrderHeader.SalesOrderID FOR XML AUTO, TYPE), (SELECT * FROM (SELECT SalesPersonID, EmployeeID FROM Sales.SalesPerson, HumanResources.Employee WHERE SalesPerson.SalesPersonID = Employee.EmployeeID) As SalesPerson WHERE SalesPerson.SalesPersonID = SalesOrderHeader.SalesPersonID FOR XML AUTO, TYPE) FROM Sales.SalesOrderHeader WHERE SalesOrderID='43659' or SalesOrderID='43660' FOR XML AUTO, TYPE ) as T(XmlCol);