query() Method (xml datový typ)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Specifikuje XQuery proti instanci xml datového typu. Výsledkem je xml typ. Metoda vrací instanci netypovaného XML.

Syntaxe

query ('XQuery')  

Arguments

XQuery
Je řetězec, výraz XQuery, který dotazuje na XML uzly, jako jsou prvky a atributy, v XML instanci.

Examples

Tato sekce uvádí příklady použití metody query() pro xml datový typ.

A. Použití metody query() proti XML typové proměnné

Následující příklad deklaruje proměnnou @myDocXML typu a přiřazuje jí XML instanci. Metoda query() se pak použije k určení XQuery proti dokumentu.

Dotaz získá podprvek tohoto prvku<Features>:<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')  

Následující výstup ukazuje výsledek:

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

B. Použití metody query() proti sloupci XML typu

V následujícím příkladu se metoda query() používá k určení XQuery proti sloupci CatalogDescriptionxml typu v databázi 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  

Všimněte si následujících položek z předchozího dotazu:

  • Sloupec CatalogDescription je typovaný sloupec xml , což znamená, že má přiřazenou kolekci schémat. V XQuery Prologu definuje klíčové slovo jmenného prostoru prefix, který je později použit v těle dotazu.

  • Metoda query() vytváří XML, prvek <Product> s atributem ProductModelID , ve kterém je hodnota atributu ProductModelID získána z databáze. Pro více informací o XML konstrukci viz XML Construction (XQuery).

  • Metoda exist() (XML datový typ) v klauzuli WHERE najde pouze řádky, které obsahují daný prvek <Warranty> v XML. Opět klíčové slovo jmenného prostoru definuje dva prefixy jmenného prostoru.

Následující výstup ukazuje částečný výsledek:

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

Všimněte si, že metody query() a exist() obě deklarují prefix PD. V těchto případech můžete použít WITH XMLNAMESPACES k nejdřív definování prefixů a použít je v dotazu.

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;