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