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 |
---|---|
< |
< |
> |
> |
& |
& |
" |
" |
' |
' |
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 Euro-Symbol durch den Zeichenverweis "€" dargestellt werden.
Hinweis |
---|
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 > 50000 and < 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>€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. Die folgende Abfrage wertet z. B. jedes Element <a> auf das Vorhandensein von Attribut attr 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 Serversql: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.