Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Base de dados SQL no Microsoft Fabric
Retorna um bit que representa uma das seguintes condições:
1, representando Verdadeiro, se a expressão XQuery numa consulta devolve um resultado não vazio. Ou seja, devolve pelo menos um nó XML.
0, representando Falso, se devolver um resultado vazio.
NULL se a instância do tipo de dado xml contra a qual a consulta foi executada contiver NULL.
Sintaxe
exist (XQuery)
Arguments
XQuery
É uma expressão XQuery, um literal de cadeia.
Observações
Observação
O método exist() devolve 1 para a expressão XQuery que devolve um resultado não vazio. Se especificar as funções true() ou false() dentro do método existir(), o método existir() devolverá 1, porque as funções true() e false() retornam Boolean True e False, respetivamente. Ou seja, devolvem um resultado não vazio). Portanto, exist() devolverá 1 (Verdadeiro), como mostrado no seguinte exemplo:
DECLARE @x XML;
SET @x='';
SELECT @x.exist('true()');
Examples
Os exemplos seguintes mostram como especificar o método exist().
Exemplo: Especificar o método exist() contra uma variável do tipo xml
No exemplo seguinte, @x é uma variável do tipo xml (xml não tipado) e @f é uma variável do tipo inteiro que armazena o valor devolvido pelo método exist( ). O método exist() devolve True (1) se o valor de data armazenado na instância XML for 2002-01-01.
DECLARE @x XML;
DECLARE @f BIT;
SET @x = '<root Somedate = "2002-01-01Z"/>';
SET @f = @x.exist('/root[(@Somedate cast as xs:date?) eq xs:date("2002-01-01Z")]');
SELECT @f;
Ao comparar datas no método exist(), note o seguinte:
O código
cast as xs:date?é usado para converter o valor para o tipo xs:date para fins de comparação.O valor do atributo @Somedate não está tipado. Ao comparar este valor, ele é implicitamente cast para o tipo do lado direito da comparação, o tipo xs:data .
Em vez de castar como xs:date(), podes usar a função construtora xs:date(). Para mais informações, veja Funções Construtoras (XQuery).
O exemplo seguinte é semelhante ao anterior, exceto que tem um <Somedate> elemento.
DECLARE @x XML;
DECLARE @f BIT;
SET @x = '<Somedate>2002-01-01Z</Somedate>';
SET @f = @x.exist('/Somedate[(text()[1] cast as xs:date ?) = xs:date("2002-01-01Z") ]')
SELECT @f;
Observe o seguinte da consulta anterior:
- O método text() devolve um nó de texto que contém o valor
2002-01-01não tipado . (O tipo XQuery é xdt:untypedAtomic.) Deve explicitamente castar este valor tipado de x para xsd:date, porque o casting implícito não é suportado neste caso.
Exemplo: Especificar o método exist() contra uma variável xml tipada
O exemplo seguinte ilustra a utilização do método exist() contra uma variável do tipo xml . É uma variável XML tipada, porque especifica o nome da coleção do espaço de nomes do esquema, ManuInstructionsSchemaCollection.
No exemplo, um documento de instruções de fabrico é primeiro atribuído a esta variável e depois o método exist() é usado para determinar se o documento inclui um <Location> elemento cujo valor do atributo LocationID é 50.
O método exist() especificado contra a @x variável retorna 1 (Verdadeiro) se o documento de instruções de fabrico incluir um<Location>elemento que tenha .LocationID=50 Caso contrário, o método retorna 0 (Falso).
DECLARE @x XML (Production.ManuInstructionsSchemaCollection);
SELECT @x=Instructions
FROM Production.ProductModel
WHERE ProductModelID=67;
--SELECT @x
DECLARE @f INT;
SET @f = @x.exist(' declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
/AWMI:root/AWMI:Location[@LocationID=50]
');
SELECT @f;
Exemplo: Especificar o método exist() contra uma coluna do tipo xml
A consulta seguinte recupera IDs de modelos de produto cujas descrições de catálogo não incluem as especificações, <Specifications> elemento:
SELECT ProductModelID, CatalogDescription.query('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<Product
ProductModelID= "{ sql:column("ProductModelID") }"
/>
') AS Result
FROM Production.ProductModel
WHERE CatalogDescription.exist('
declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
/pd:ProductDescription[not(pd:Specifications)]'
) = 1;
Observe o seguinte da consulta anterior:
A cláusula WHERE seleciona apenas as linhas da tabela ProductDescription que satisfazem a condição especificada na coluna do tipo xml do CatalogDescription .
O método exist() na cláusula WHERE devolve 1 (True) se o XML não incluir nenhum <
Specifications> elemento. Note-se o uso da função not() (XQuery).A função sql:column() (XQuery) é usada para trazer o valor de uma coluna não XML.
Esta consulta devolve um conjunto de linhas vazio.
A consulta especifica os métodos query() e exist() do tipo de dado xml e ambos os métodos declaram os mesmos namespaces no prólogo da consulta. Neste caso, pode querer usar WITH XMLNAMESPACES para declarar o prefixo e usá-lo na consulta.
WITH XMLNAMESPACES ('https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription' AS pd)
SELECT ProductModelID, CatalogDescription.query('
<Product
ProductModelID= "{ sql:column("ProductModelID") }"
/>
') AS Result
FROM Production.ProductModel
WHERE CatalogDescription.exist('
/pd:ProductDescription[not(pd:Specifications)]'
) = 1;
Ver também
Adicionar namespaces a consultas com WITH XMLNAMESPACES
Comparar XML digitado com XML não tipado
Criar instâncias de dados XML
Métodos de Tipos de Dados XML
Linguagem de Modificação de Dados XML (XML DML)