Primärausdrücke (XQuery)

Gilt für:SQL Server

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 repräsentiert
&lt; <
&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. Das Euro-Symbol kann beispielsweise durch den Zeichenverweis "&#8364;" dargestellt werden.

Hinweis

SQL Server verwendet XML-Version 1.0 als Grundlage 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>€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="https://X";  
for $x:i in /root return data($x:i)')  
GO  

Sie können die Erweiterungsfunktion sql:variable() verwenden, um auf SQL-Variablen zu verweisen, 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. Eine Lösung hierfür ist die Verwendung der Funktion sql:variable().

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. Sie kann auch von der nodes()-Methode im Kontext von XPath-Ausdrücken oder den []-Prädikaten geändert werden.

Das Kontextelement wird von einem Ausdruck zurückgegeben, der einen Punkt (.) enthält. Die folgende Abfrage wertet beispielsweise jedes Element <a> auf das Vorhandensein des Attributs attraus. 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 funktionen sql:variable() und sql:column() aufrufen. Eine Liste der implementierten Funktionen finden Sie unter XQuery Functions 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.

Weitere Informationen

XML Construction (XQuery) (XML-Konstruktion (XQuery))