Partilhar via


Função not (XQuery)

Retornará TRUE se o valor Booliano efetivo de $arg for falso, 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 de XQuery em instâncias XML armazenadas em várias colunas do 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 um XML que contém IDs de modelos de produto para modelos de produto cujas descrições de catálogo não incluem o elemento <Specifications>.

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 Prólogo do XQuery para definir o prefixo.

  • A consulta então constrói o XML que inclui o elemento <Product> e seu atributo de 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, porque cada descrição de 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. Quer dizer, 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 

Observe o seguinte na consulta anterior:

  • A palavra-chave declare namespace no Prólogo do XQuery define o prefixo de 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 um 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ó oferece suporte a argumentos do tipo xs:boolean, ou node()*, ou à sequência vazia.

Consulte também

Referência

Funções XQuery em tipos de dados xml