Dela via


VISSA | ANY (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Förhandsversion av Microsoft Fabric

Jämför ett skalärt värde med en uppsättning värden med en kolumn. VISSA och ANY är likvärdiga.

Transact-SQL syntaxkonventioner

Syntax

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

Arguments

scalar_expression
Är ett giltigt uttryck.

{ = | <> | != | > | >= | !> | < | <= | !< }
Är en giltig jämförelseoperator.

NÅGRA | VILKEN SOM HELST

Anger att en jämförelse ska göras.

subquery

Är en underfråga som har en resultatuppsättning med en kolumn. Datatypen för kolumnen som returneras måste vara samma datatyp som scalar_expression.

Result types

Boolean

Result value

VISSA eller ALLA returnerar TRUE när den angivna jämförelsen är TRUE för valfritt par (scalar_expression, x) där x är ett värde i enkolumnsuppsättningen. annars returnerar FALSE.

Remarks

VISSA kräver att scalar_expression jämför positivt med minst ett värde som returneras av underfrågan. Instruktioner som kräver att scalar_expression jämför positivt med varje värde som returneras av underfrågan finns i ALLA (Transact-SQL). Om underfrågan till exempel returnerar värden på 2 och 3 utvärderas scalar_expression = SOME (subquery) som TRUE för en scalar_express på 2. Om underfrågan returnerar värden på 2 och 3 skulle scalar_expression = ALL (underfråga) utvärderas som FALSE, eftersom vissa av värdena för underfrågan (värdet 3) inte uppfyller uttryckets villkor.

Examples

A. Köra ett enkelt exempel

Följande instruktioner skapar en enkel tabell och lägger till värdena 1för , 2, 3och 4 till ID kolumnen.

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

Följande fråga returneras TRUE eftersom 3 är mindre än några av värdena i tabellen.

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

Följande fråga returneras FALSE eftersom 3 inte är mindre än alla värden i tabellen.

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

B. Köra ett praktiskt exempel

I följande exempel skapas en lagrad procedur som avgör om alla komponenter i en angiven SalesOrderID i AdventureWorks2022 databasen kan tillverkas under det angivna antalet dagar. I exemplet används en underfråga för att skapa en lista över antalet DaysToManufacture värden för alla komponenter i den specifika SalesOrderIDoch testar sedan om något av de värden som returneras av underfrågan är större än det angivna antalet dagar. Om varje värde för DaysToManufacture det returneras är mindre än det angivna talet är villkoret TRUE och det första meddelandet skrivs ut.

-- 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.' ;

Om du vill testa proceduren kör du proceduren SalesOrderID``49080med hjälp av , som har en komponent som kräver 2 dagar och två komponenter som kräver 0 dagar. Den första instruktionen uppfyller kriterierna. Den andra frågan gör det inte.

EXECUTE ManyDaysToComplete 49080, 2 ;  

Här är resultatet.

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

EXECUTE ManyDaysToComplete 49080, 1 ;  

Här är resultatet.

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

See also