query() Method (xml Data Type)

Berlaku untuk: SQL Server (semua versi yang didukung) Azure SQL Managed Instance Database Azure SQL

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

Sintaks

query ('XQuery')  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan 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 jenis data xml .

J. Menggunakan metode query() terhadap variabel jenis xml

Contoh berikut mendeklarasikan variabel @myDoc jenis 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 menentukan awalan yang kemudian digunakan dalam isi kueri.

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

  • Metode exist() (tipe 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)