Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
van toepassing op:SQL Server-
Existentiële en universele kwantificatoren geven verschillende semantiek op voor Booleaanse operatoren die worden toegepast op twee reeksen. Dit wordt weergegeven in de volgende tabel.
existentiële kwantificator
Als een item in de eerste reeks twee reeksen een overeenkomst heeft in de tweede reeks, is de geretourneerde waarde waar op basis van de vergelijkingsoperator die wordt gebruikt.
universele kwantificator
Als elk item in de eerste reeks een overeenkomst heeft in de tweede reeks, is de geretourneerde waarde waar.
XQuery ondersteunt gekwantificeerde expressies in de volgende vorm:
( some | every ) <variable> in <Expression> (,...) satisfies <Expression>
U kunt deze expressies in een query gebruiken om existentiële of universele kwantificatie expliciet toe te passen op een expressie via een of meerdere reeksen. In SQL Server moet de expressie in de satisfies-component resulteren in een van de volgende: een knooppuntreeks, een lege reeks of een Booleaanse waarde. De effectieve Booleaanse waarde van het resultaat van die expressie wordt gebruikt in de kwantificatie. De existentiële kwantificatie die gebruikmaakt van sommige retourneert Waar als ten minste één van de waarden die door de kwantificator zijn gebonden, een Waar-resultaat heeft in de expressie van de voldoen. De universele kwantificatie die gebruikmaakt van elke moet Waar hebben voor alle waarden die zijn gebonden door de kwantificator.
Met de volgende query wordt bijvoorbeeld elke <Location> element gecontroleerd om te zien of het een LocationID-kenmerk heeft.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
if (every $WC in //AWMI:root/AWMI:Location
satisfies $WC/@LocationID)
then
<Result>All work centers have workcenterLocation ID</Result>
else
<Result>Not all work centers have workcenterLocation ID</Result>
') as Result
FROM Production.ProductModel
where ProductModelID=7
Omdat LocationID een vereist kenmerk is van het element <Location>, ontvangt u het verwachte resultaat:
<Result>All work centers have Location ID</Result>
In plaats van de methode query() te gebruiken, kunt u de methode value() gebruiken om het resultaat te retourneren naar de relationele wereld, zoals wordt weergegeven in de volgende query. De query retourneert Waar als alle locaties van het werkcentrum LocationID-kenmerken hebben. Anders retourneert de query False.
SELECT Instructions.value('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
every $WC in //AWMI:root/AWMI:Location
satisfies $WC/@LocationID',
'nvarchar(10)') as Result
FROM Production.ProductModel
where ProductModelID=7
Met de volgende query wordt gecontroleerd of een van de productafbeeldingen klein is. In de XML van de productcatalogus worden verschillende hoeken opgeslagen voor elke productafbeelding van een andere grootte. Mogelijk wilt u ervoor zorgen dat elke XML-productcatalogus ten minste één kleine afbeelding bevat. De volgende query doet dit:
SELECT ProductModelID, CatalogDescription.value('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
some $F in /PD:ProductDescription/PD:Picture
satisfies $F/PD:Size="small"', 'nvarchar(20)') as SmallPicturesStored
FROM Production.ProductModel
WHERE ProductModelID = 19
Dit is een gedeeltelijk resultaat:
ProductModelID SmallPicturesStored
-------------- --------------------
19 true
Implementatiebeperkingen
Dit zijn de beperkingen:
- Typeverklaring wordt niet ondersteund als onderdeel van het binden van de variabele in de gekwantificeerde expressies.