Expressions primaires (XQuery)

Les expressions primaires XQuery incluent : littéraux, références à une variable, expressions d'élément contextuel, constructeurs et appels de fonction.

Littéraux

Les littéraux XQuery peuvent être des littéraux numériques ou des chaînes de caractères. Un littéral chaîne peut inclure des références d'entité prédéfinies. Une référence d'entité est une séquence de caractères qui commence par un « et commercial » et qui représente un seul et unique caractère qui aurait autrement une signification syntaxique particulière. Voici quelques exemples de références d'entité prédéfinies pour XQuery.

Référence d'entité

Description

<

<

&gt;

>

&amp;

&

&quot;

"

&apos;

'

Un littéral chaîne peut également comprendre une référence de caractère (référence de style XML à un caractère Unicode) qui est identifiée par un point de code décimal ou hexadécimal. Par exemple, le symbole Euro peut être représenté par la référence de caractère « &#8364; ».

Notes

SQL Server s'appuie sur XML version 1.0 pour l'analyse.

Exemples

Les exemples suivants expliquent comment utiliser des littéraux, ainsi que des références d'entité et de caractère.

Ce code retourne une erreur, car les caractères <' et '> ont une signification particulière.

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

Si vous utilisez une référence d'entité à la place, la requête aboutit.

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

L'exemple suivant montre comment utiliser une référence de caractère pour représenter le symbole Euro.

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

Voici l'ensemble de résultats.

<a>€12.50</a>

Dans l'exemple suivant, la requête est délimitée par des apostrophes. Par conséquent, l'apostrophe de la valeur de chaîne doit donc être doublée.

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

Voici l'ensemble de résultats.

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

Les fonctions booléennes intégrées, true() et false(), peuvent servir à représenter des valeurs booléennes, comme le montre l'exemple suivant.

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

Le constructeur direct d'élément spécifie une expression entre accolades, qui est remplacée par sa valeur dans le code XML qui en résulte.

Voici l'ensemble de résultats.

<a>true</a>

Références à une variable

Dans XQuery, les références à une variable se présentent sous la forme d'un QName précédé d'un signe $. Cette mise en œuvre ne prend en charge que les références faites à des variables non préfixées. Par exemple, la requête suivante définit la variable $i dans l'expression FLWOR.

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

La requête suivante ne fonctionnera pas car un préfixe d'espace de noms est ajouté au nom de la variable.

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

Vous pouvez utiliser la fonction d'extension sql:variable() pour faire référence à des variables SQL, comme le montre la requête suivante.

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

Voici l'ensemble de résultats.

<value>2500</value>

Limites de la mise en œuvre

Les limites de la mise en œuvre sont les suivantes :

  • Les variables dotées d'un préfixe d'espace de noms ne sont pas prises en charge.

  • L'importation de modules n'est pas prise en charge.

  • Les déclarations de variable externe ne sont pas prises en charge. Une solution consiste à utiliser la fonction sql:variable().

Expressions d'élément contextuel

L'élément contextuel est l'élément en cours de traitement dans le cadre d'une expression de chemin d'accès. Il est initialisé dans une instance non-NULL de type XML avec le nœud de document. Il peut aussi être modifié par la méthode nodes(), dans le cadre des expressions XPath ou des prédicats [].

L'élément contextuel est renvoyé par une expression contenant un point (.). Par exemple, la requête suivante évalue chaque élément <a> de façon à déterminer la présence de l'attribut attr. Si l'attribut est présent, l'élément est renvoyé. Notez que la condition exprimée dans le prédicat indique que le nœud de contexte est spécifié par un simple point.

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

Voici l'ensemble de résultats.

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

Appels de fonction

Vous pouvez appeler des fonctions XQuery intégrées, ainsi que les fonctions sql:variable() et sql:column() de SQL Server. Pour obtenir la liste des fonctions implémentées, consultez Fonctions XQuery impliquant le type de données xml.

Limites de la mise en œuvre

Les limites de la mise en œuvre sont les suivantes :

  • Il est impossible de déclarer une fonction dans le prologue XQuery.

  • L'importation de fonctions n'est pas prise en charge.

Voir aussi

Concepts