Freigeben über


Primärausdrücke (XQuery)

Die XQuery-Primärausdrücke umfassen Literale, Variablenverweise, Kontextelementausdrücke, Konstruktoren und Funktionsaufrufe.

Literale

XQuery-Literale können numerische oder Zeichenfolgenliterale sein. Ein Zeichenfolgenliteral kann vordefinierte Entitätsverweise enthalten; ein Entitätsverweis ist eine Abfolge von Zeichen. Die Abfolge beginnt mit einem kaufmännischen Und-Zeichen, das ein einzelnes Zeichen darstellt, das anderenfalls syntaktische Signifikanz besitzen könnte. Darauf folgen die vordefinierten Entitätsverweise für XQuery.

Entitätsverweis

Darstellung

<

<

&gt;

>

&amp;

&

&quot;

"

&apos;

'

Ein Zeichenfolgenliteral kann auch einen Zeichenverweis enthalten, einen Verweis im XML-Stil auf ein Unicode-Zeichen, das durch seinen dezimalen oder hexadezimalen Codepunkt identifiziert wird. Beispielsweise kann das Eurosymbol durch den Zeichenverweis "&#8364;" dargestellt werden.

HinweisHinweis

SQL Server verwendet XML, Version 1.0, als Basis für die Analyse.

Beispiele

Die folgenden Beispiele veranschaulichen die Verwendung von Literalen sowie Entitäts- und Zeichenverweisen.

Dieser Code gibt einen Fehler zurück, weil die Zeichen <' und '> eine besondere Bedeutung besitzen.

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

Wenn Sie stattdessen einen Entitätsverweis verwenden, funktioniert die Abfrage:

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

Das folgende Beispiel zeigt die Verwendung eines Zeichenverweises zur Darstellung des Euro-Symbols.

DECLARE @var XML
SET @var = ''
SELECT @var.query(' <a>&#8364;12.50</a>')

Dies ist das Ergebnis.

<a>€12.50</a>

Im folgenden Beispiel wird die Abfrage durch Apostrophe getrennt. Daher wird der Apostroph im Zeichenfolgenwert durch zwei aufeinanderfolgende Apostrophe dargestellt.

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

Dies ist das Ergebnis.

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

Die integrierten booleschen Funktionen true() und false() können verwendet werden, um boolesche Werte darzustellen, wie im folgenden Beispiel gezeigt.

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

Der direkte Elementkonstruktor gibt einen Ausdruck in geschweiften Klammern an. Dieser wird durch seinen Wert im sich ergebenden XML ersetzt.

Dies ist das Ergebnis.

<a>true</a>

Variablenverweise

Ein Variablenverweis in XQuery ist ein QName, dem ein $-Zeichen vorangestellt wurde. Diese Implementierung unterstützt nur Variablenverweise ohne Präfix. Die folgende Abfrage definiert z. B. die Variable $i im FLWOR-Ausdruck:

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

Die folgende Abfrage funktioniert nicht, weil dem Variablennamen ein Namespacepräfix hinzugefügt wurde.

DECLARE @var XML
SET @var = '<root>1</root>'
SELECT @var.query('
DECLARE namespace x="http://X";
for $x:i in /root return data($x:i)')
GO

Sie können die sql:variable()-Erweiterungsfunktion zum Verweisen auf SQL-Variablen verwenden, wie in der folgenden Abfrage gezeigt.

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

Dies ist das Ergebnis.

<value>2500</value>

Implementierungseinschränkungen

Die folgenden Implementierungseinschränkungen sind zu beachten:

  • Variablen mit Namespacepräfixen werden nicht unterstützt.

  • Modulimport wird nicht unterstützt.

  • Externe Variablendeklarationen werden nicht unterstützt. Zu diesem Zweck können Sie die sql:variable()-Funktion verwenden.

Kontextelementausdrücke

Das Kontextelement ist das Element, das aktuell im Kontext eines path-Ausdrucks verarbeitet wird. Es wird in einer XML-Datentypinstanz ungleich NULL mit dem Dokumentknoten initialisiert. Es kann auch durch die nodes()-Methode, im Kontext von XPath-Ausdrücken oder []-Prädikaten geändert werden.

Das Kontextelement wird von einem Ausdruck zurückgegeben, der einen Punkt (.) enthält. Beispielsweise wertet die folgende Abfrage jedes <a>-Element auf das Vorhandensein des attr-Attributs aus. Wenn das Attribut vorhanden ist, wird das Element zurückgegeben. Beachten Sie, dass die Bedingung im Prädikat angibt, dass der Kontextknoten durch einen einzelnen Punkt angegeben wird.

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

Dies ist das Ergebnis.

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

Funktionsaufrufe

Sie können integrierte XQuery-Funktionen und die SQL Server sql:variable()- und sql:column()-Funktionen aufrufen. Eine Liste der implementierten Funktionen finden Sie unter XQuery-Funktionen für den xml-Datentyp.

Implementierungseinschränkungen

Die folgenden Implementierungseinschränkungen sind zu beachten:

  • Funktionsdeklaration im XQuery-Prolog wird nicht unterstützt.

  • Funktionsimport wird nicht unterstützt.

Siehe auch

Konzepte

XML-Konstruktion (XQuery)