Compartilhar via


Expressões primárias (XQuery)

Aplica-se a:SQL Server

As expressões primárias do XQuery incluem literais, referências variáveis, expressões de item de contexto, construtores e chamadas de função.

Literais

Os literais do XQuery podem ser literais numéricos ou da cadeia de caracteres. Um literal da cadeia de caracteres pode incluir referências de entidade predefinidas; uma referência de entidade é uma sequência de caracteres. A sequência inicia com um E comercial que representa um único caractere, que, de outra forma, poderia ter significância sintática. A seguir, são apresentadas as referências de entidade predefinidas para XQuery.

Referência de entidade Representa
&lt; <
&gt; >
&amp; &
&quot; "
&apos; '

Um literal da cadeia de caracteres também pode conter uma referência de caractere, uma referência de estilo XML para um caractere Unicode, que é identificado por seu ponto de código decimal ou hexadecimal. Por exemplo, o símbolo Euro pode ser representado pela referência de caractere, "&#8364;".

Observação

SQL Server usa o XML versão 1.0 como base para análise.

Exemplos

Os exemplos a seguir ilustram o uso de literais e também referências de entidade e caractere.

Esse código retorna um erro, pois os caracteres <' e '> têm significado especial.

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

Se, em vez disso, você usar uma referência de entidade, a consulta funcionará.

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

O exemplo a seguir ilustra o uso de uma referência de caractere para representar o símbolo de Euro.

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

Este é o resultado.

<a>€12.50</a>

No exemplo a seguir, a consulta é delimitada por apóstrofos. Portanto, o apóstrofo no valor da cadeia de caracteres é representado por dois apóstrofos adjacentes.

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

Este é o resultado.

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

As funções boolianas internas, true() e false(), podem ser usadas para representar valores boolianos, conforme mostrado no exemplo a seguir.

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

O construtor de elemento direto especifica uma expressão em colchetes. Isso é substituído por seu valor no XML resultante.

Este é o resultado.

<a>true</a>

Referências variáveis

Uma referência variável no XQuery é um QName precedido por um sinal de $. Essa implementação oferece suporte somente a referências variáveis sem-prefixo. Por exemplo, a consulta a seguir define a variável $i na expressão FLWOR.

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

A consulta a seguir não funcionará, pois um prefixo de namespace é adicionado ao nome da variável.

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  

Você pode usar a função de extensão sql:variable() para se referir a variáveis SQL, conforme mostrado na consulta a seguir.

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

Este é o resultado.

<value>2500</value>

Limitações de implementação

Estas são as limitações de implementação:

  • Não é oferecido suporte a variáveis com prefixos de namespace.

  • Não é oferecido suporte à importação de módulo.

  • Não é oferecido suporte a declarações de variáveis externas. Uma solução para isso é usar a função sql:variable().

Expressões de item de contexto

O item de contexto é o item sendo processado atualmente no contexto de uma expressão de caminho. Ele é inicializado em uma instância de tipo de dados XML não NULL com o nó de documento. Ele também pode ser alterado pelo método nodes(), no contexto de expressões XPath ou os predicados [].

O item de contexto é retornado por uma expressão que contém um ponto (.). Por exemplo, a consulta a seguir avalia cada elemento <a> quanto à presença do atributo .attr Se o atributo estiver presente, o elemento será retornado. Observe que a condição no predicado especifica que o nó de contexto é especificado por um único ponto.

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

Este é o resultado.

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

Chamadas de função

Você pode chamar funções XQuery internas e as funções SQL Server sql:variable() e sql:column(). Para obter uma lista de funções implementadas, consulte Funções XQuery em relação ao tipo de dados xml.

Limitações de implementação

Estas são as limitações de implementação:

  • Não é oferecido suporte à declaração de função no prólogo do XQuery.

  • Não é oferecido suporte à importação de função.

Consulte Também

Construção XML (XQuery)