Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Existenciální a univerzální kvantifikátory specifikují odlišnou sémantiku pro Booleovské operátory, které se aplikují na dvě posloupnosti. To je znázorněno v následující tabulce.
Existenciální kvantifikátor
Máme dvě posloupnosti, pokud má některá položka v první posloupnosti shodu ve druhé posloupnosti, na základě použitého srovnávacího operátoru je vrácená hodnota True.
Univerzální kvantifikátor
Dáme-li dvě posloupnosti, pokud má každý prvek v první posloupnosti shodu ve druhé posloupnosti, vrácená hodnota je Pravda.
XQuery podporuje kvantifikované výrazy v následující podobě:
( some | every ) <variable> in <Expression> (,...) satisfies <Expression>
Tyto výrazy můžete použít v dotazu k explicitnímu použití buď existenční, nebo univerzální kvantifikace na výraz přes jednu nebo více sekvencí. V SQL Server musí výraz v klauzuli satisfies vést k jedné z následujících hodnot: sekvenci uzlů, prázdné sekvenci nebo Booleovské hodnotě. Efektivní booleovská hodnota výsledku tohoto výrazu bude použita v kvantifikaci. Existenční kvantifikace, která používá něco , vrátí True, pokud alespoň jedna z hodnot vázaných kvantifikátorem má výsledek True ve výrazu splnit. Univerzální kvantifikace, která používá každý, musí mít True pro všechny hodnoty vázané kvantifikátorem.
Například následující dotaz kontroluje každý <prvek Location> , zda má atribut LocationID.
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
Protože LocationID je povinným atributem prvku <Location> , obdržíte očekávaný výsledek:
<Result>All work centers have Location ID</Result>
Místo použití metody query() můžete použít metodu value() k vrácení výsledku do relačního světa, jak je ukázáno v následujícím dotazu. Dotaz vrací True, pokud všechna místa pracovních center mají atributy LocationID. Jinak dotaz vrátí 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
Následující dotaz kontroluje, zda je některá z obrázků produktu malá. V XML katalogu produktu jsou pro každý obrázek produktu jiné velikosti uloženy různé úhly. Možná budete chtít zajistit, aby každý XML katalogu produktu obsahoval alespoň jednu malou fotografii. Následující dotaz to umožňuje:
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
Jedná se o částečný výsledek:
ProductModelID SmallPicturesStored
-------------- --------------------
19 true
Omezení implementace
Toto jsou omezení:
- Typové tvrzení není podporováno jako součást vázání proměnné v kvantifikovaných výrazech.