query() Method (xml Data Type)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Menentukan XQuery terhadap instans jenis data xml . Hasilnya adalah jenis xml . Metode mengembalikan instans XML yang tidak dititik.

Sintaksis

query ('XQuery')  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

XQuery
Adalah string, ekspresi XQuery, yang meminta simpul XML, seperti elemen dan atribut, dalam instans XML.

Contoh

Bagian ini menyediakan contoh penggunaan metode query() dari tipe data xml .

J. Menggunakan metode query() terhadap variabel jenis xml

Contoh berikut mendeklarasikan variabel @myDocjenis xml dan menetapkan instans XML ke dalamnya. Metode query() kemudian digunakan untuk menentukan XQuery terhadap dokumen.

Kueri mengambil <Features> elemen turunan dari <ProductDescription> elemen:

DECLARE @myDoc XML  
SET @myDoc = '<Root>  
<ProductDescription ProductID="1" ProductName="Road Bike">  
<Features>  
  <Warranty>1 year parts and labor</Warranty>  
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>  
</Features>  
</ProductDescription>  
</Root>'  
SELECT @myDoc.query('/Root/ProductDescription/Features')  

Output berikut menunjukkan hasilnya:

<Features>  
  <Warranty>1 year parts and labor</Warranty>  
  <Maintenance>3 year parts and labor extended maintenance is available</Maintenance>  
</Features>        

B. Menggunakan metode query() terhadap kolom jenis XML

Dalam contoh berikut, metode query() digunakan untuk menentukan XQuery terhadap kolom CatalogDescription jenis xml di database AdventureWorks :

SELECT CatalogDescription.query('  
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
<Product ProductModelID="{ /PD:ProductDescription[1]/@ProductModelID }" />  
') as Result  
FROM Production.ProductModel  
where CatalogDescription.exist('  
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
declare namespace wm="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain";  
     /PD:ProductDescription/PD:Features/wm:Warranty ') = 1  

Perhatikan item berikut dari kueri sebelumnya:

  • Kolom CatalogDescription adalah kolom xml yang diketik, yang berarti memiliki koleksi skema yang terkait dengannya. Di XQuery Prolog, kata kunci namespace mendefinisikan awalan yang kemudian digunakan dalam isi kueri.

  • Metode query() membuat XML, <>Productelemen yang memiliki atribut ProductModelID, tempat nilai atribut ProductModelID diambil dari database. Untuk informasi selengkapnya tentang konstruksi XML, lihat Konstruksi XML (XQuery).

  • Metode exist() (jenis data XML) dalam klausa WHERE hanya menemukan baris yang berisi <Warranty> elemen dalam XML. Sekali lagi, kata kunci namespace mendefinisikan dua awalan namespace.

Output berikut menunjukkan hasil parsial:

<Product ProductModelID="19"/>   
<Product ProductModelID="23"/>   
...  

Perhatikan metode query() dan exist() keduanya mendeklarasikan awalan PD. Dalam kasus ini, Anda dapat menggunakan WITH XMLNAMESPACES untuk terlebih dahulu menentukan awalan dan menggunakannya dalam kueri.

WITH XMLNAMESPACES 
(  
   'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD,  
   'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain' AS WM
)  
SELECT CatalogDescription.query('<Product ProductModelID="{ /PD:ProductDescription[1]/@ProductModelID }" />')
       AS Result  
FROM Production.ProductModel  
WHERE CatalogDescription.exist('/PD:ProductDescription/PD:Features/WM:Warranty ') = 1;

Lihat Juga

Menambahkan Namespace ke Kueri dengan XMLNAMESPACES
Membandingkan XML Yang Dititik dengan XML Yang Tidak Dititik
Membuat Instans Data XML
Metode Tipe Data xml
Bahasa Modifikasi Data XML (XML DML)