Compartir a través de


Expresiones principales (XQuery)

Se aplica a:SQL Server

Las expresiones principales de XQuery incluyen literales, referencias de variables, expresiones de elementos de contexto, constructores y llamadas a funciones.

Literales

Los literales de XQuery pueden ser numéricos o de cadena. Un literal de cadena puede incluir referencias de entidades predefinidas. Una referencia de entidad es una secuencia de caracteres. La secuencia empieza con un "y" comercial (&) que representa un solo carácter que, en otra situación, tendría un significado sintáctico. A continuación se exponen las referencias de entidades predefinidas de XQuery.

Referencia de entidad Representa
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '

Un literal de cadena también puede contener una referencia de carácter, una referencia de estilo XML a un carácter Unicode, que se identifica mediante su punto de código decimal o hexadecimal. Por ejemplo, el símbolo euro se puede representar mediante la referencia de caracteres "& #8364;".

Nota

SQL Server usa XML versión 1.0 como base para el análisis.

Ejemplos

Los ejemplos siguientes ilustran la utilización de literales y las referencias de entidad y carácter.

Este código devuelve un error porque los caracteres <' y '> tienen un significado especial.

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

Si utiliza una referencia de entidad en su lugar, la consulta funcionará:

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

En el ejemplo siguiente se ilustra el uso de una referencia de carácter para representar el símbolo del euro.

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

Éste es el resultado.

<a>€12.50</a>

En el ejemplo siguiente, la consulta está delimitada por apóstrofos. Por tanto, el apóstrofo del valor de cadena se representa mediante dos apóstrofos adyacentes.

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

Éste es el resultado.

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

Las funciones booleanas integradas, true() y false() se pueden usar para representar valores booleanos, como se muestra en el ejemplo siguiente.

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

El constructor de elemento directo especifica una expresión entre llaves. Ésta se reemplazará por su valor en el XML resultante.

Éste es el resultado.

<a>true</a>

Referencias de variable

Una referencia de variable en XQuery es un QName precedido de un signo $. Esta implementación solo admite las referencias de variable sin prefijo. Por ejemplo, en la consulta siguiente se define la variable $i en la expresión FLWOR:

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

La consulta siguiente no funcionará porque se ha agregado un prefijo de espacio de nombres al nombre de la variable.

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  

Puede usar la función de extensión sql:variable() para hacer referencia a variables SQL, como se muestra en la consulta siguiente.

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

Éste es el resultado.

<value>2500</value>

Limitaciones de la implementación

Éstas son las limitaciones de la implementación:

  • No se admiten las variables con prefijos de espacio de nombres.

  • No se admite la importación de módulos.

  • No se admiten las declaraciones de variables externas. Una solución a esto consiste en usar la función sql:variable().

Expresiones de elementos de contexto

El elemento de contexto es el elemento que se está procesando en el contexto de una expresión de ruta de acceso. Se inicializa en una instancia de tipo de datos XML distinta de NULL con el nodo de documento. También puede cambiarlo el método nodes(), en el contexto de expresiones XPath o los predicados [].

Una expresión que contiene un punto (.) devuelve el elemento de contexto. Por ejemplo, la consulta siguiente evalúa cada elemento <a> para la presencia del atributo .attr Si el atributo está presente, se devuelve el elemento. Tenga en cuenta que la condición del predicado especifica que el nodo de contexto se especifica mediante un solo punto.

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

Éste es el resultado.

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

Llamadas de función

Puede llamar a funciones XQuery integradas y a las funciones SQL Server sql:variable() y sql:column(). Para obtener una lista de las funciones implementadas, consulte Funciones XQuery con el tipo de datos xml.

Limitaciones de la implementación

Éstas son las limitaciones de la implementación:

  • No se admite la declaración de funciones en el prólogo de XQuery.

  • No se admite la importación de funciones.

Consulte también

Construcción de XML (XQuery)