Bagikan melalui


Menggunakan Kueri XML Berlapis

Jenis xml data dan direktif TYPE dalam kueri FOR XML memungkinkan XML yang dikembalikan oleh kueri FOR XML untuk diproses di server serta pada klien.

Pemrosesan dengan Variabel Jenis xml

Anda bisa menetapkan hasil kueri FOR XML ke xml variabel jenis, atau menggunakan XQuery untuk mengkueri hasilnya, dan menetapkan hasil tersebut ke xml variabel jenis untuk pemrosesan lainnya.

DECLARE @x xml  
SET @x=(SELECT ProductModelID, Name  
        FROM Production.ProductModel  
        WHERE ProductModelID=122 or ProductModelID=119  
        FOR XML RAW, TYPE)  
SELECT @x  
-- Result  
--<row ProductModelID="122" Name="All-Purpose Bike Stand" />  
--<row ProductModelID="119" Name="Bike Wash" />  

Anda juga dapat memproses XML yang dikembalikan dalam variabel, @x, dengan menggunakan salah xml satu metode jenis data. Misalnya, Anda dapat mengambil nilai atribut ProductModelID dengan menggunakan metode value().

DECLARE @i int;  
SET @i = (SELECT @x.value('/row[1]/@ProductModelID[1]', 'int'));  
SELECT @i;  

Dalam contoh berikut, hasil kueri FOR XML dikembalikan sebagai jenis xml, karena arahan TYPE ditentukan dalam klausa FOR XML.

SELECT ProductModelID, Name  
FROM Production.ProductModel  
WHERE ProductModelID=119 or ProductModelID=122  
FOR XML RAW, TYPE,ROOT('myRoot');  
  

Ini adalah hasilnya:

<myRoot>  
  <row ProductModelID="122" Name="All-Purpose Bike Stand" />  
  <row ProductModelID="119" Name="Bike Wash" />  
</myRoot>  

Karena hasilnya berjenis xml , Anda bisa menentukan salah xml satu metode tipe data secara langsung terhadap XML ini, seperti yang diperlihatkan dalam kueri berikut. Dalam kueri, metode query() (Tipe Data xml) digunakan untuk mengambil turunan elemen pertama <row> dari <myRoot> elemen.

SELECT  (SELECT ProductModelID, Name  
         FROM Production.ProductModel  
         WHERE ProductModelID=119 or ProductModelID=122  
         FOR XML RAW, TYPE,ROOT('myRoot')).query('/myRoot[1]/row[1]');  
  

Ini adalah hasilnya:

<row ProductModelID="122" Name="All-Purpose Bike Stand" />  

Mengembalikan Hasil Kueri XML Dalam ke Kueri Luar sebagai Instans Jenis xml

Anda dapat menulis kueri berlapis FOR XML di mana hasil dari kueri terdalam dikembalikan sebagai xml jenis ke kueri terluar. Contohnya:

SELECT Col1,   
       Col2,   
       ( SELECT Col3, Col4   
        FROM  T2  
        WHERE T2.Col = T1.Col  
        ...  
        FOR XML AUTO, TYPE )  
FROM T1  
WHERE ...  
FOR XML AUTO, TYPE;  

Perhatikan hal berikut ini dari kueri sebelumnya:

  • XML yang dihasilkan oleh kueri dalam FOR XML ditambahkan ke XML yang dihasilkan oleh kueri luar FOR XML.

  • Kueri dalam menentukan arahan TYPE . Oleh karena itu, data XML yang dikembalikan oleh kueri bagian dalam adalah dari jenis xml. Jika direktif TYPE tidak ditentukan, hasil dari kueri FOR XML dikembalikan sebagai nvarchar(max) dan data XML diubah menjadi entitas.

Mengontrol Bentuk Data XML yang Dihasilkan

Kueri FOR XML bertingkat memberi Anda lebih banyak kendali dalam menentukan bentuk data XML yang dihasilkan. Anda dapat menggunakan kueri FOR XML berlapis untuk membuat XML yang sebagian berfokus pada atribut dan sebagian berfokus pada elemen.

Untuk informasi selengkapnya tentang menentukan XML yang berfokus pada atribut dan berfokus pada elemen dengan kueri FOR XML bersarang, lihat Kueri FOR XML Dibandingkan dengan Kueri FOR XML Bersarang dan Membentuk XML dengan Kueri FOR XML Bersarang.

Anda dapat membuat hierarki XML yang menyertakan saudara kandung dengan menentukan mode OTOMATIS berlapis untuk kueri XML. Untuk informasi selengkapnya, lihat Membuat Saudara dengan Kueri Mode OTOMATIS Berlapis.

Terlepas dari mode mana yang Anda gunakan, kueri XML berlapis memberikan kontrol lebih besar dalam menjelaskan bentuk XML yang dihasilkan. Mereka dapat digunakan sebagai pengganti kueri mode EKSPLISIT.

Contoh

Topik berikut ini menyediakan contoh kueri FOR XML bersarang.

Kueri FOR XML Dibandingkan dengan Kueri FOR XML Bertingkat
Membandingkan kueri FOR XML tingkat tunggal dengan kueri FOR XML bersarang. Contoh ini mencakup demonstrasi tentang cara menentukan XML yang berpusat pada atribut dan berpusat pada elemen sebagai hasil kueri.

Membuat Saudara dengan Kueri Mode OTOMATIS Berlapis
Memperlihatkan cara menghasilkan saudara dengan menggunakan kueri mode OTOMATIS berlapis

Menggunakan Kueri XML Berlapis di ASP.NET
Menunjukkan bagaimana aplikasi ASPX dapat menggunakan FOR XML untuk mengembalikan XML dari SQL Server.

Bentuk XML dengan Kueri FOR XML Bersarang
Memperlihatkan cara menggunakan kueri XML berlapis untuk mengontrol struktur dokumen XML yang dibuat oleh SQL Server.