Partilhar via


Funções em Valores Boolianos – função not

Aplica-se: SQL Server

Retorna TRUE se o valor booleano efetivo de $arg for falso e retorna FALSE se o valor booleano efetivo de $arg for verdadeiro.

Sintaxe

  
fn:not($arg as item()*) as xs:boolean  

Argumentos

$arg
Uma sequência de itens para quais há um valor Booliano efetivo.

Exemplos

Este tópico fornece exemplos de XQuery em relação a instâncias XML armazenadas em várias colunas de tipo xml no banco de dados AdventureWorks.

R. Usando a função not() XQuery para localizar modelos de produtos cujas descrições de catálogo não incluem o <elemento Specifications> .

A consulta a seguir constrói XML que contém IDs de modelo de produto para modelos de produto cujas descrições de catálogo não incluem o <Specifications> elemento.

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/*)]  '  
     ) = 0  

Observe o seguinte na consulta anterior:

  • Como documento usa namespaces, a amostra usa a instrução WITH NAMESPACES. Outra opção é usar a palavra-chave declare namespace no XQuery Prolog para definir o prefixo.

  • Em seguida, a consulta constrói o XML que inclui o <Product> elemento e seu atributo ProductModelID .

  • A cláusula WHERE usa o método exist() (tipo de dados XML) para filtrar as linhas. O método exist() retornará True se houver <elementos ProductDescription> que não tenham <elementos filho Specification> . Observe o uso da função not().

Esse conjunto de resultados está vazio, pois cada descrição do catálogo de modelo de produto inclui o <elemento Especificações> .

B. Usando a função not() XQuery para recuperar locais de centro de trabalho que não têm um atributo MachineHours

A consulta a seguir é especificada na coluna Instructions. Essa coluna armazena instruções de fabricação para os modelos de produtos.

Para um modelo de produto em particular, a consulta recupera locais de centro de trabalho que não especificam MachineHours. Ou seja, o atributo MachineHours não é especificado para o <elemento Location> .

SELECT ProductModelID, Instructions.query('  
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions" ;  
     for $i in /AWMI:root/AWMI:Location[not(@MachineHours)]  
     return  
       <Location LocationID="{ $i/@LocationID }"   
                   LaborHrs="{ $i/@LaborHours }" >  
        </Location>  
') as Result  
FROM Production.ProductModel  
WHERE ProductModelID=7   

Na consulta anterior, observe o seguinte:

  • O declarenamespace no XQuery Prolog define o prefixo do namespace das instruções de fabricação do Adventure Works. Ela representa o mesmo namespace usado no documento de instruções de fabricação.

  • Na consulta, o predicado not(@MachineHours) retornará True se não houver nenhum atributo MachineHours .

Este é o resultado:

ProductModelID Result   
-------------- --------------------------------------------  
7              <Location LocationID="30" LaborHrs="1"/>  
               <Location LocationID="50" LaborHrs="3"/>  
               <Location LocationID="60" LaborHrs="4"/>  

Limitações de implementação

Estas são as limitações:

  • A função not() suporta apenas argumentos do tipo xs:boolean ou node()* ou a sequência vazia.

Confira também

Funções XQuery em Tipos de Dados XML