SOME | ANY (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed Instance

Vergleicht einen Skalarwert mit Werten, die sich in einer einzelnen Spalte befinden. SOME und ANY sind identisch.

Transact-SQL-Syntaxkonventionen

Syntax

scalar_expression { = | <> | != | > | >= | !> | < | <= | !< }   
     { SOME | ANY } ( subquery )   

Hinweis

Informationen zum Anzeigen der Transact-SQL-Syntax für SQL Server 2014 (12.x) und früher finden Sie unter Dokumentation zu früheren Versionen.

Argumente

scalar_expression
Ein beliebiger gültiger Ausdruck.

{ = | <> | != | > | >= | !> | < | <= | !< }
Ein gültiger Vergleichsoperator.

SOME | ANY

Legt fest, dass ein Vergleich durchgeführt werden soll.

subquery

Ist eine Unterabfrage mit einem Resultset, das aus einer Spalte besteht. Der Datentyp der zurückgegebenen Spalte muss mit dem Datentyp von scalar_expression übereinstimmen.

Ergebnistypen

Boolescher Wert

Ergebniswert

SOME oder ANY geben TRUE zurück, wenn der angegebene Vergleich für ein Paar (scalar_expression, x) TRUE ergibt, wobei x ein Wert in der Menge der Einzelspalten ist. Andernfalls wird FALSE zurückgegeben.

Bemerkungen

SOME erfordert, dass scalar_expression mit mindestens einem von der Unterabfrage zurückgegebenen Wert positiv verglichen wird. Anweisungen, die erfordern, dass scalar_expression mit jedem von der Unterabfrage zurückgegebenen Wert positiv verglichen wird, finden Sie unter ALL (Transact-SQL). Wenn die Unterabfrage beispielsweise die Werte 2 und 3 zurückgibt, ergibt scalar_expression = SOME (Unterabfrage) für scalar_express = 2 TRUE. Wenn die Unterabfrage beispielsweise die Werte 2 und 3 zurückgibt, ergibt scalar_expression = ALL (Unterabfrage) FALSE, da einige Werte der Unterabfrage (der Wert 3) die Kriterien des Ausdrucks nicht erfüllen.

Beispiele

A. Ausführen eines einfachen Beispiels

Mit den folgenden Anweisungen wird eine einfache Tabelle erstellt, und der 1-Spalte werden die Werte 2, 3, 4 und ID hinzugefügt.

CREATE TABLE T1  
(ID INT) ;  
GO  
INSERT T1 VALUES (1) ;  
INSERT T1 VALUES (2) ;  
INSERT T1 VALUES (3) ;  
INSERT T1 VALUES (4) ;  

Die folgende Abfrage gibt TRUE zurück, da 3 kleiner als einige der Werte in der Tabelle ist.

IF 3 < SOME (SELECT ID FROM T1)  
PRINT 'TRUE'   
ELSE  
PRINT 'FALSE' ;  

Die folgende Abfrage gibt FALSE zurück, weil 3 nicht kleiner als sämtliche Werte in der Tabelle ist.

IF 3 < ALL (SELECT ID FROM T1)  
PRINT 'TRUE'   
ELSE  
PRINT 'FALSE' ;  

B. Ausführen eines praktischen Beispiels

Im folgenden Beispiel wird eine gespeicherte Prozedur erstellt, die bestimmt, ob alle Komponenten einer angegebenen SalesOrderID in der AdventureWorks2022-Datenbank innerhalb der angegebenen Anzahl von Tagen gefertigt werden können. Im Beispiel wird eine Unterabfrage verwendet, um eine Liste mit der Anzahl der DaysToManufacture-Werte für alle Komponenten einer bestimmten SalesOrderID zu erstellen. Anschließend wird geprüft, ob einer der von der Unterabfrage zurückgegebenen Werte größer ist als die Anzahl der angegebenen Tage. Wenn jeder Wert von DaysToManufacture, der zurückgegeben wird, kleiner ist als die angegebene Anzahl, ist die Bedingung TRUE, und die erste Meldung wird ausgegeben.

-- Uses AdventureWorks

CREATE PROCEDURE ManyDaysToComplete @OrderID INT, @NumberOfDays INT  
AS  
IF   
@NumberOfDays < SOME  
   (  
    SELECT DaysToManufacture  
    FROM Sales.SalesOrderDetail  
    JOIN Production.Product   
    ON Sales.SalesOrderDetail.ProductID = Production.Product.ProductID   
    WHERE SalesOrderID = @OrderID  
   )  
PRINT 'At least one item for this order can''t be manufactured in specified number of days.'
ELSE   
PRINT 'All items for this order can be manufactured in the specified number of days or less.' ;

Zum Testen der Prozedur führen Sie diese aus, indem Sie die SalesOrderID``49080 verwenden, die über eine Komponente verfügt, die 2 Tage erfordert, und über zwei Komponenten, die 0 Tage erfordern. Die erste Anweisung erfüllt die Kriterien. Die zweite Abfrage nicht.

EXECUTE ManyDaysToComplete 49080, 2 ;  

Hier ist das Resultset.

All items for this order can be manufactured in the specified number of days or less.

EXECUTE ManyDaysToComplete 49080, 1 ;  

Hier ist das Resultset.

At least one item for this order can't be manufactured in specified number of days.

Siehe auch