Wyrażenia ilościowych (XQuery)

Kwantyfikatory existential i uniwersalnych określić inną semantyka operatorów logicznych, które są stosowane do dwóch sekwencji.Jest ona wyświetlana w następującej tabela.

  • Kwantyfikator existential
    Biorąc pod uwagę dwie sekwencje, jeśli dowolnego element w pierwszej kolejności ma odpowiednika w drugiej kolejności, oparte na operator porównania, który jest używany, zwrócona wartość jest TRUE.

  • Kwantyfikator uniwersalny
    Jeśli każdy element w pierwszej kolejności ma odpowiednika w drugiej kolejności, biorąc pod uwagę dwie sekwencje, zwrócona wartość jest TRUE.

XQuery obsługuje ilościowych wyrażeń w następującej postaci:

( some | every ) <variable> in <Expression> (,…) satisfies <Expression>

Za pomocą tych wyrażeń w kwerendzie można jawnie dotyczą ilościowego existential albo uniwersalną wyrażenie sekwencji jednego lub kilku.W SQL Server, wyrażenie w satisfies Klauzula zawiera się w jednej z następujących czynności: sekwencja węzłów, sekwencję pusta lub logiczny. Skuteczne wartość typu logiczny wynikiem tego wyrażenie będzie używany w ilościowego.Existential ilościowego, który używa some zwróci wartość true, jeśli co najmniej jedną z wartości związana kwantyfikator ma wartość PRAWDA, wynik w wyrażeniu satisfy. Uniwersalny ilościowego używający every musi mieć wartość true dla wszystkich wartości związana kwantyfikator.

Na przykład następujące kwerendy kontroli co <Lokalizacja> element, aby sprawdzić, czy ma ona atrybut 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

Ponieważ LocationID wymaganego atrybut <Lokalizacja> element, pojawi się oczekiwany wynik:

<Result>All work centers have Location ID</Result> 

Zamiast używać Metoda Query(), można użyć Metoda Value() , aby powrócić do świata relacyjnej wynik, jak pokazano w następującej kwerendzie.Kwerenda zwraca wartość true, jeśli atrybuty LocationID wszystkie lokalizacje gniazda roboczego.W przeciwnym razie kwerenda zwraca wartość 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

Następujące kwerendy sprawdza, jeśli jeden z obrazów produktu jest mała.W katalogu produktów XML różnych kąty są przechowywane dla każdego produktu obrazu o różnych rozmiarach.Należy upewnić się, że każdy katalog produktów XML zawiera co najmniej jeden obraz małe.Następująca kwerenda wykonująca to:

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

Jest to wynik częściowy:

ProductModelID SmallPicturesStored 
-------------- --------------------
19             true      

defaultButton

Ograniczenia są następujące:

  • Typ potwierdzenia nie jest obsługiwane w ramach wiązanie zmiennej w wyrażeniach ilościowych.

See Also

Concepts