Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
En XQuery-fråga består av en prolog och en brödtext. XQuery-prologen är en serie deklarationer och definitioner som tillsammans skapar den miljö som krävs för frågebearbetning. I SQL Server kan XQuery-prologen innehålla namnområdesdeklarationer. XQuery-brödtexten består av en sekvens med uttryck som anger det avsedda frågeresultatet.
Till exempel anges följande XQuery mot kolumnen Instruktioner i XML- typ som lagrar tillverkningsinstruktioner som XML. Frågan hämtar tillverkningsinstruktionerna för arbetscentrets plats 10. Den query() metoden för xml- datatyp används för att ange XQuery.
SELECT Instructions.query('declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/AWMI:root/AWMI:Location[@LocationID=10]
') AS Result
FROM Production.ProductModel
WHERE ProductModelID=7
Observera följande från föregående fråga:
XQuery-prologen innehåller en AWMI-deklaration (namespace prefix),
(namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";.Nyckelordet
declare namespacedefinierar ett namnområdesprefix som används senare i frågetexten./AWMI:root/AWMI:Location[@LocationID="10"]är frågetexten.
Namnområdesdeklarationer
En namnområdesdeklaration definierar ett prefix och associerar det med en namnområdes-URI, enligt följande fråga. I frågan är CatalogDescription en xml- typkolumn.
När du anger XQuery mot den här kolumnen anger frågeprologen declare namespace-deklarationen för att associera prefixet PD, produktbeskrivning, med namnområdets URI. Det här prefixet används sedan i frågetexten i stället för namnområdets URI. Noderna i den resulterande XML-koden finns i namnområdet som är associerat med namnområdes-URI:n.
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/PD:ProductDescription/PD:Summary
') as Result
FROM Production.ProductModel
where ProductModelID=19
För att förbättra frågeläsbarheten kan du deklarera namnområden med hjälp av MED XMLNAMESPACES i stället för att deklarera prefix och namnområdesbindning i frågeprologen med hjälp av declare namespace.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS PD)
SELECT CatalogDescription.query('
/PD:ProductDescription/PD:Summary
') as Result
FROM Production.ProductModel
where ProductModelID=19
Mer information finns i Lägg till namnområden i frågor med XMLNAMESPACES.
Standarddeklaration för namnområde
I stället för att deklarera ett namnområdesprefix med hjälp av declare namespace-deklarationen kan du använda declare default element namespace-deklarationen för att binda ett standardnamnområde för elementnamn. I det här fallet anger du inget prefix.
I följande exempel anger sökvägsuttrycket i frågetexten inte något namnområdesprefix. Som standard tillhör alla elementnamn det standardnamnområde som anges i prologen.
SELECT CatalogDescription.query('
declare default element namespace "https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/ProductDescription/Summary
') as Result
FROM Production.ProductModel
WHERE ProductModelID=19
Du kan deklarera ett standardnamnområde med hjälp av WITH XMLNAMESPACES:
WITH XMLNAMESPACES (DEFAULT 'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription')
SELECT CatalogDescription.query('
/ProductDescription/Summary
') as Result
FROM Production.ProductModel
WHERE ProductModelID=19