Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 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;