Delen via


Primaire expressies (XQuery)

van toepassing op:SQL Server-

De primaire XQuery-expressies bevatten letterlijke gegevens, variabele verwijzingen, contextitemexpressies, constructors en functieaanroepen.

Letterlijke tekens

Letterlijke XQuery-waarden kunnen numerieke waarden of letterlijke tekenreeksen zijn. Een letterlijke tekenreeks kan vooraf gedefinieerde entiteitsverwijzingen bevatten en een entiteitsverwijzing is een reeks tekens. De reeks begint met een ampersand die één teken vertegenwoordigt dat anders syntactische significantie kan hebben. Hieronder volgen de vooraf gedefinieerde entiteitsverwijzingen voor XQuery.

Naslaginformatie over entiteiten Vertegenwoordigt
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '

Een letterlijke tekenreeks kan ook een tekenverwijzing, een XML-stijlverwijzing naar een Unicode-teken bevatten dat wordt geïdentificeerd door het decimale of hexadecimale codepunt. Het eurosymbool kan bijvoorbeeld worden vertegenwoordigd door het teken waarnaar wordt verwezen, '€'.

Notitie

SQL Server gebruikt XML-versie 1.0 als basis voor parseren.

Voorbeelden

In de volgende voorbeelden ziet u het gebruik van letterlijke waarden en ook entiteits- en tekenverwijzingen.

Deze code retourneert een fout, omdat de <' en '> tekens een speciale betekenis hebben.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <SalaryRange>Salary > 50000 and < 100000</SalaryRange>')  
GO  

Als u in plaats daarvan een entiteitsreferentie gebruikt, werkt de query.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <SalaryRange>Salary &gt; 50000 and &lt; 100000</SalaryRange>')  
GO  

In het volgende voorbeeld ziet u het gebruik van een tekenreferentie om het eurosymbool weer te geven.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query(' <a>€12.50</a>')  

Dit is het resultaat.

<a>€12.50</a>

In het volgende voorbeeld wordt de query gescheiden door apostrofs. Daarom wordt de apostrof in de tekenreekswaarde weergegeven door twee aangrenzende apostrofen.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query('<a>I don''t know</a>')  
Go  

Dit is het resultaat.

<a>I don't know</a>

De ingebouwde Booleaanse functies, true() en false(), kunnen worden gebruikt om Booleaanse waarden weer te geven, zoals wordt weergegeven in het volgende voorbeeld.

DECLARE @var XML  
SET @var = ''  
SELECT @var.query('<a>{true()}</a>')  
GO  

De constructor voor het directe element geeft een expressie in accolades op. Dit wordt vervangen door de waarde in de resulterende XML.

Dit is het resultaat.

<a>true</a>

Variabeleverwijzingen

Een variabele verwijzing in XQuery is een QName voorafgegaan door een $-teken. Deze implementatie ondersteunt alleen niet-voorgefixeerde variabeleverwijzingen. De volgende query definieert bijvoorbeeld de variabele $i in de FLWOR-expressie.

DECLARE @var XML  
SET @var = '<root>1</root>'  
SELECT @var.query('  
 for $i in /root return data($i)')  
GO  

De volgende query werkt niet omdat er een naamruimtevoorvoegsel wordt toegevoegd aan de naam van de variabele.

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  

U kunt de extensiefunctie sql:variable() gebruiken om te verwijzen naar SQL-variabelen, zoals wordt weergegeven in de volgende query.

DECLARE @price money  
SET @price=2500  
DECLARE @x xml  
SET @x = ''  
SELECT @x.query('<value>{sql:variable("@price") }</value>')  

Dit is het resultaat.

<value>2500</value>

Implementatiebeperkingen

Dit zijn de implementatiebeperkingen:

  • Variabelen met voorvoegsels voor naamruimten worden niet ondersteund.

  • Module importeren wordt niet ondersteund.

  • Declaraties van externe variabelen worden niet ondersteund. Een oplossing hiervoor is het gebruik van de functie sql:variable().

Expressies voor contextitems

Het contextitem is het item dat momenteel wordt verwerkt in de context van een padexpressie. Het wordt geïnitialiseerd in een niet-NULL XML-gegevenstype-exemplaar met het documentknooppunt. Het kan ook worden gewijzigd door de methode nodes(), in de context van XPath-expressies of de [] predicaten.

Het contextitem wordt geretourneerd door een expressie die een punt (.) bevat. De volgende query evalueert bijvoorbeeld elk element <a> op de aanwezigheid van kenmerk attr. Als het kenmerk aanwezig is, wordt het element geretourneerd. Houd er rekening mee dat de voorwaarde in het predicaat aangeeft dat het contextknooppunt wordt opgegeven met één punt.

DECLARE @var XML  
SET @var = '<ROOT>  
<a>1</a>  
<a attr="1">2</a>  
</ROOT>'  
SELECT @var.query('/ROOT[1]/a[./@attr]')  

Dit is het resultaat.

<a attr="1">2</a>

Functie-aanroepen

U kunt ingebouwde XQuery-functies en de functies SQL Server sql:variable() en sql:column() aanroepen. Zie XQuery-functies voor een lijst met geïmplementeerde functies op basis van het xml-gegevenstype.

Implementatiebeperkingen

Dit zijn de implementatiebeperkingen:

  • Functiedeclaratie in het XQuery-prolog wordt niet ondersteund.

  • Functie importeren wordt niet ondersteund.

Zie ook

XML-constructie (XQuery)