Partilhar via


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

Aplica-se a:SQL Server

Retornará TRUE se o valor booliano efetivo de $arg for false e retornará FALSE se o valor booliano 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 XQuery em instâncias XML armazenadas em várias colunas de tipo xml no banco de dados AdventureWorks.

a. Usando a função not() XQuery para localizar modelos de produto 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 do modelo de produto inclui o <elemento Specifications> .

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 de namespace de instruções de fabricação da 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() só dá suporte a argumentos do tipo xs:boolean, ou node()*, ou da sequência vazia.

Consulte Também

Funções XQuery em tipos de dados xml