Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Existentiella och universella kvantifikatorer specificerar olika semantik för booleska operatorer som tillämpas på två följder. Detta visas i följande tabell.
Existentiell kvantifikator
Givet två sekvenser, om något objekt i den första sekvensen har en matchning i den andra sekvensen, baserat på den jämförelseoperator som används, är det returnerade värdet True.
Universell kvantifikator
Givet två sekvenser, om varje element i den första sekvensen har en matchning i den andra sekvensen, är det returnerade värdet Sann.
XQuery stöder kvantifierade uttryck i följande form:
( some | every ) <variable> in <Expression> (,...) satisfies <Expression>
Du kan använda dessa uttryck i en fråga för att explicit tillämpa antingen existentiell eller universell kvantifiering på ett uttryck över en eller flera sekvenser. I SQL Server måste uttrycket i satsen satisfies resultera i något av följande: en nodsekvens, en tom sekvens eller ett booleskt värde. Det effektiva boolesk värdet av resultatet av det uttrycket kommer att användas i kvantifieringen. Den existentiella kvantifieringen som använder vissa kommer att ge True om minst ett av värdena som begränsas av kvantifikatorn har ett True-resultat i tillfredsställelseuttrycket. Den universella kvantifieringen som använder varje måste ha True för alla värden bundna av kvantifikatorn.
Till exempel kontrollerar följande fråga varje <Plats-element> för att se om det har ett LocationID-attribut.
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
Eftersom LocationID är ett obligatoriskt attribut för Location-elementet <> får du det förväntade resultatet:
<Result>All work centers have Location ID</Result>
Istället för att använda query()-metoden kan du använda value()-metoden för att returnera resultatet till relationsvärlden, som visas i följande fråga. Frågan returnerar True om alla arbetsplatsplatser har LocationID-attribut. Annars returnerar frågan 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
Följande fråga kontrollerar om en av produktbilderna är liten. I produktkatalogen XML lagras olika vinklar för varje produktbild av olika storlek. Du kan vilja se till att varje produktkatalog-XML innehåller minst en liten bild. Följande fråga uppnår detta:
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
Detta är ett partiellt resultat:
ProductModelID SmallPicturesStored
-------------- --------------------
19 true
Implementeringsbegränsningar
Det här är begränsningarna:
- Typassertion stöds inte som en del av att binda variabeln i de kvantifierade uttrycken.