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.