Sdílet prostřednictvím


Funkce v logických hodnotách – ne funkce

platí pro:SQL Server

Vrátí hodnotu PRAVDA, pokud je platná logická hodnota $arg false a vrátí hodnotu FALSE, pokud je platná logická hodnota $arg pravdivá.

Syntax

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

Argumenty

$arg
Posloupnost položek, pro které existuje platná logická hodnota.

Příklady

Toto téma obsahuje příklady XQuery pro instance XML, které jsou uloženy v různých xml sloupce typu v databázi AdventureWorks.

A. Pomocí funkce not() XQuery vyhledejte modely produktů, jejichž popisy katalogu nezahrnují <specifikace> prvek.

Následující dotaz vytvoří KÓD XML, který obsahuje ID modelů produktů pro modely produktů, jejichž popisy katalogu nezahrnují prvek <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  

Všimněte si následujících věcí z předchozího dotazu:

  • Vzhledem k tomu, že dokument používá obory názvů, ukázka používá příkaz WITH NAMESPACES. Další možností je použít deklarovat obor názvů klíčové slovo v XQuery Prolog definovat předponu.

  • Dotaz pak vytvoří XML, který obsahuje <Product> element a jeho ProductModelID atribut.

  • Klauzule WHERE používá metodu exist() (datový typ XML) k filtrování řádků. Metoda exist() vrátí hodnotu True, pokud existují <elementy ProductDescription>, které nemají <Specifikace> podřízených elementů. Všimněte si použití funkce not().

Tato sada výsledků je prázdná, protože každý popis katalogu modelů produktů obsahuje prvek <Specifikace>.

B. Použití funkce not() XQuery k načtení umístění pracovních center, která nemají atribut MachineHours

Následující dotaz je určen pro sloupec Pokyny. Tento sloupec uchovává pokyny pro výrobu modelů produktů.

U konkrétního modelu produktu dotaz načte umístění pracovních center, která nezadávají machinehours. To znamená, že atribut MachineHours není určen pro prvek <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   

V předchozím dotazu si všimněte těchto věcí:

  • deklarovat prostor názvů v XQuery Prolog definuje předponu oboru názvů pokynů pro výrobu společnosti Adventure Works. Představuje stejný obor názvů používaný v dokumentu s pokyny pro výrobu.

  • V dotazu not(@MachineHours) predikát vrátí hodnotu True, pokud neexistuje žádný atribut MachineHours.

Toto je výsledek:

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

Omezení implementace

Toto jsou omezení:

  • Funkce not() podporuje pouze argumenty typu xs:boolean nebo node()* nebo prázdnou sekvenci.

Viz také

funkce XQuery proti datového typu XML