Aracılığıyla paylaş


query() Yöntemi (xml Veri Türü)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiMicrosoft Fabric'te SQL veritabanı

xml veri tipinin bir örneğine karşı bir XQuery belirtir. Sonuç xml tipindedir. Yöntem, tiplenmemiş bir XML örneği döndürür.

Sözdizimi

query ('XQuery')  

Arguments

XQuery
Bir XML örneğinde öğeler ve özellikler gibi XML düğümlerini sorgulayan bir dizidir; XQuery ifadesidir.

Örnekler

Bu bölüm, xml veri tipinin query() yönteminin kullanımına örnekler sunmaktadır.

A. Query() yöntemini bir xml tipi değişkene karşı kullanmak

Aşağıdaki örnek, xml tipinde bir değişken @myDoc ilan eder ve ona bir XML örneği atar. Query() yöntemi, belgeye karşı bir XQuery belirtmek için kullanılır.

Sorgu, elemanın<Features> alt elemanını alır:<ProductDescription>

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')  

Aşağıdaki çıktı sonucu göstermektedir:

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

B. Query() yöntemini XML tipi bir sütunla karşılaştırmak

Aşağıdaki örnekte, query() yöntemi, AdventureWorks veritabanındaki xmltipindeki CatalogDescription sütununa karşı bir XQuery belirtmek için kullanılır:

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  

Önceki sorgudan aşağıdaki maddelere dikkat edin:

  • CatalogDescription sütunu, tiplenmiş bir xml sütunudur, yani kendisiyle ilişkili bir şema koleksiyonu vardır. XQuery Prolog'da, isim alanı anahtar kelimesi, sorgu gövdesinde daha sonra kullanılan öneki tanımlar.

  • Query() yöntemi, < özniteliğine sahip bir öğe olanProduct>XML oluşturur; bu öğede ProductModelID özniteliği veritabanından alınır. XML yapısı hakkında daha fazla bilgi için XML Construction (XQuery) bölümüne bakınız.

  • WHERE cümlesinde exist() yöntemi (XML veri türü ) yalnızca XML'deki öğeyi içeren <Warranty> satırları bulur. Yine, namespace anahtar kelimesi iki namespace önekini tanımlar.

Aşağıdaki çıktı kısmi sonucu gösterir:

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

Soru() ve exist() yöntemlerinin her ikisi de PD önekini belirtir. Bu durumlarda, önekleri önce tanımlamak ve sorguda kullanmak için WITH XMLNAMESPACES kullanabilirsiniz.

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;

Ayrıca Bkz.

WITH XMLNAMESPACES ile Sorgulara Ad Alanları Ekleme
Türlü XML'i Türsüz XML ile Karşılaştır
XML Verisi Örnekleri Oluşturmak
xml Veri Türü Yöntemleri
XML Veri Değiştirme Dili (XML DML)