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
De primära XQuery-uttrycken innehåller literaler, variabelreferenser, kontextobjektuttryck, konstruktorer och funktionsanrop.
Litteraler
XQuery-literaler kan vara numeriska eller strängliteraler. En strängliteral kan innehålla fördefinierade entitetsreferenser och en entitetsreferens är en sekvens med tecken. Sekvensen börjar med ett et-tecken som representerar ett enda tecken som annars kan ha syntaktisk signifikans. Följande är de fördefinierade entitetsreferenserna för XQuery.
Entitetsreferens | Representerar |
---|---|
< |
< |
> |
> |
& |
& |
" |
" |
' |
' |
En strängliteral kan också innehålla en teckenreferens, en XML-stilreferens till ett Unicode-tecken, som identifieras med dess decimal- eller hexadecimala kodpunkt. Eurosymbolen kan till exempel representeras av teckenreferensen "€".
Not
SQL Server använder XML-version 1.0 som grund för parsning.
Exempel
Följande exempel illustrerar användningen av literaler och även entitets- och teckenreferenser.
Den här koden returnerar ett fel eftersom <'
och '>
tecken har en särskild betydelse.
DECLARE @var XML
SET @var = ''
SELECT @var.query(' <SalaryRange>Salary > 50000 and < 100000</SalaryRange>')
GO
Om du använder en entitetsreferens i stället fungerar frågan.
DECLARE @var XML
SET @var = ''
SELECT @var.query(' <SalaryRange>Salary > 50000 and < 100000</SalaryRange>')
GO
I följande exempel illustreras användningen av en teckenreferens för att representera eurosymbolen.
DECLARE @var XML
SET @var = ''
SELECT @var.query(' <a>€12.50</a>')
Det här är resultatet.
<a>€12.50</a>
I följande exempel avgränsas frågan av apostrofer. Därför representeras apostrofen i strängvärdet av två intilliggande apostrofer.
DECLARE @var XML
SET @var = ''
SELECT @var.query('<a>I don''t know</a>')
Go
Det här är resultatet.
<a>I don't know</a>
De inbyggda booleska funktionerna, true() och false(), kan användas för att representera booleska värden, som du ser i följande exempel.
DECLARE @var XML
SET @var = ''
SELECT @var.query('<a>{true()}</a>')
GO
Konstruktorn för direktelement anger ett uttryck i klammerparenteser. Detta ersätts med dess värde i den resulterande XML-koden.
Det här är resultatet.
<a>true</a>
Variabelreferenser
En variabelreferens i XQuery är ett QName som föregås av ett $-tecken. Den här implementeringen stöder endast inaktuella variabelreferenser. Följande fråga definierar till exempel variabeln $i
i FLWOR-uttrycket.
DECLARE @var XML
SET @var = '<root>1</root>'
SELECT @var.query('
for $i in /root return data($i)')
GO
Följande fråga fungerar inte eftersom ett namnområdesprefix läggs till i variabelnamnet.
DECLARE @var XML
SET @var = '<root>1</root>'
SELECT @var.query('
DECLARE namespace x="https://X";
for $x:i in /root return data($x:i)')
GO
Du kan använda funktionen sql:variable() för att referera till SQL-variabler, som du ser i följande fråga.
DECLARE @price money
SET @price=2500
DECLARE @x xml
SET @x = ''
SELECT @x.query('<value>{sql:variable("@price") }</value>')
Det här är resultatet.
<value>2500</value>
Implementeringsbegränsningar
Det här är implementeringsbegränsningarna:
Variabler med namnområdesprefix stöds inte.
Modulimport stöds inte.
Externa variabeldeklarationer stöds inte. En lösning på detta är att använda funktionen sql:variable().
Uttryck för kontextobjekt
Kontextobjektet är det objekt som för närvarande bearbetas i kontexten för ett sökvägsuttryck. Den initieras i en instans av xml-datatypen not-NULL med dokumentnoden. Det kan också ändras med metoden nodes() i kontexten för XPath-uttryck eller [] predikat.
Kontextobjektet returneras av ett uttryck som innehåller en punkt (.). Följande fråga utvärderar till exempel varje element <a
> för förekomsten av attributet attr
. Om attributet finns returneras elementet. Observera att villkoret i predikatet anger att kontextnoden anges per enskild period.
DECLARE @var XML
SET @var = '<ROOT>
<a>1</a>
<a attr="1">2</a>
</ROOT>'
SELECT @var.query('/ROOT[1]/a[./@attr]')
Det här är resultatet.
<a attr="1">2</a>
Funktionsanrop
Du kan anropa inbyggda XQuery-funktioner och funktionerna SQL Server sql:variable() och sql:column(). En lista över implementerade funktioner finns i XQuery Functions mot xml-datatypen.
Implementeringsbegränsningar
Det här är implementeringsbegränsningarna:
Funktionsdeklaration i XQuery-prolog stöds inte.
Funktionsimport stöds inte.