Menggunakan kueri XML berlapis untuk

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Jenis data xml 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 dapat menetapkan hasil kueri FOR XML ke variabel jenis xml , atau menggunakan XQuery untuk mengkueri hasilnya, dan menetapkan hasil tersebut ke variabel jenis xml untuk pemrosesan lebih lanjut.

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 satu metode jenis data xml . Misalnya, Anda dapat mengambil ProductModelID nilai atribut dengan menggunakan metode value().

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

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

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 adalah jenis xml , Anda dapat menentukan salah satu metode tipe data xml 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 kueri dalam dikembalikan sebagai jenis xml ke kueri luar. 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 luar FOR XML.

  • Kueri dalam menentukan arahan TYPE . Oleh karena itu, data XML yang dikembalikan oleh kueri dalam berjenis xml . Jika direktif TYPE tidak ditentukan, hasil kueri dalam FOR XML dikembalikan sebagai nvarchar(max) dan data XML diberi izin.

Mengontrol bentuk data XML yang dihasilkan

Kueri XML berlapis memberi Anda lebih banyak kontrol dalam menentukan bentuk data XML yang dihasilkan. Anda dapat menggunakan kueri XML berlapis untuk membuat XML yang sebagian berentrik atribut dan sebagian elemen-sentris.

Untuk informasi selengkapnya tentang menentukan XML yang berfokus pada atribut dan elemen-sentris dengan kueri XML berlapis, lihat Untuk Kueri XML Dibandingkan dengan Kueri XML Berlapis dan XML Bentuk dengan Kueri XML Berlapis UNTUK XML.

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 di tempat kueri mode EKSPLISIT.

Contoh

Topik berikut ini menyediakan contoh kueri XML BERlapis.