Functies op Booleaanse waarden - niet functie
van toepassing op:SQL Server-
Retourneert TRUE als de effectieve Booleaanse waarde van $arg onwaar is en retourneert ONWAAR als de effectieve Booleaanse waarde van $arg waar is.
Syntaxis
fn:not($arg as item()*) as xs:boolean
Argumenten
$arg
Een reeks items waarvoor een effectieve Booleaanse waarde is.
Voorbeelden
Dit onderwerp bevat XQuery-voorbeelden voor XML-exemplaren die zijn opgeslagen in verschillende xml--typekolommen in de AdventureWorks-database.
Een. Gebruik de functie not() XQuery om productmodellen te vinden waarvan de catalogusbeschrijvingen niet de <Specifications> element bevatten.
Met de volgende query wordt XML gemaakt die productmodel-id's bevat voor productmodellen waarvan de catalogusbeschrijvingen niet het <Specifications
> element bevatten.
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
Let op het volgende uit de vorige query:
Omdat het document naamruimten gebruikt, wordt in het voorbeeld de instructie WITH NAMESPACES gebruikt. Een andere optie is om de naamruimte te declareren trefwoord in de XQuery Prolog- om het voorvoegsel te definiƫren.
De query maakt vervolgens de XML die het <
Product
>-element en het bijbehorende Kenmerk ProductModelID bevat.De WHERE-component maakt gebruik van de methode exist() (XML-gegevenstype) om de rijen te filteren. De exist() methode retourneert True als er <ProductDescription> elementen zijn die geen <Specificatie> onderliggende elementen hebben. Let op het gebruik van de functie not().
Deze resultatenset is leeg, omdat elke beschrijving van de productmodelcatalogus de <Specificaties> element bevat.
B. De functie not() XQuery gebruiken om werkcentrumlocaties op te halen die geen MachineHours-kenmerk hebben
De volgende query wordt opgegeven in de kolom Instructies. In deze kolom worden productie-instructies voor de productmodellen opgeslagen.
Voor een bepaald productmodel haalt de query werkcentrumlocaties op die geen MachineHours opgeven. Dat wil gezegd: het kenmerk MachineHours is niet opgegeven voor het element <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
Let op het volgende in de voorgaande query:
De declarenaamruimte in XQuery Prolog- definieert het voorvoegsel van de naamruimte voor de productie-instructies van Adventure Works. Het vertegenwoordigt dezelfde naamruimte die wordt gebruikt in het document met productie-instructies.
In de query retourneert de niet(@MachineHours) predicaat True als er geen MachineHours kenmerk is.
Dit is het resultaat:
ProductModelID Result
-------------- --------------------------------------------
7 <Location LocationID="30" LaborHrs="1"/>
<Location LocationID="50" LaborHrs="3"/>
<Location LocationID="60" LaborHrs="4"/>
Implementatiebeperkingen
Dit zijn de beperkingen:
- De functie not() ondersteunt alleen argumenten van het type xs:boolean of node()*, of de lege reeks.