Sdílet prostřednictvím


NĚKTERÉ | ANY (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Porovná skalární hodnotu se sadou hodnot s jedním sloupcem. NĚKTERÉ a ANY jsou ekvivalentní.

Transact-SQL konvence syntaxe

Syntax

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

Arguments

scalar_expression
Je libovolný platný výraz.

{ = | <> | != | > | >= | !> | < | <= | !< }
Je jakýkoli platný relační operátor.

NĚKTERÉ | JAKÝKOLI

Určuje, že se má provést porovnání.

subquery

Je poddotaz, který má sadu výsledků jednoho sloupce. Datový typ vráceného sloupce musí být stejný datový typ jako scalar_expression.

Typy výsledků

Boolean

Hodnota výsledku

Funkce SOME nebo ANY vrátí hodnotu TRUE , pokud je zadané porovnání pravda pro libovolnou dvojici (scalar_expression, x), kde x je hodnota v sadě s jedním sloupcem; v opačném případě vrátí hodnotu FALSE.

Remarks

NĚKTERÉ vyžadují , aby scalar_expression porovnat pozitivně s alespoň jednou hodnotou vrácenou poddotazem. Příkazy, které vyžadují , aby scalar_expression porovnat pozitivně s každou hodnotou vrácenou poddotazem, viz ALL (Transact-SQL). Pokud například poddotaz vrátí hodnoty 2 a 3, scalar_expression = SOME (poddotaz) by se pro scalar_express ze 2 vyhodnotil jako PRAVDA. Pokud poddotaz vrátí hodnoty 2 a 3, scalar_expression = ALL (poddotaz) by se vyhodnotil jako NEPRAVDA, protože některé hodnoty poddotazů (hodnota 3) nesplní kritéria výrazu.

Examples

A. Spuštění jednoduchého příkladu

Následující příkazy vytvoří jednoduchou tabulku a přidají hodnoty 1, 2, 3a 4 do ID sloupce.

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

Následující dotaz vrátí TRUE , protože 3 je menší než některé hodnoty v tabulce.

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

Následující dotaz vrátí hodnotu FALSE , protože 3 není menší než všechny hodnoty v tabulce.

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

B. Spuštění praktického příkladu

Následující příklad vytvoří uloženou proceduru, která určuje, zda lze všechny součásti zadané SalesOrderID v AdventureWorks2025 databázi vyrábět v zadaném počtu dnů. V příkladu se pomocí poddotaz vytvoří seznam počtu DaysToManufacture hodnot pro všechny součásti konkrétního objektu SalesOrderIDa pak otestuje, jestli některé z hodnot vrácených poddotazem jsou větší než zadaný počet dní. Pokud je každá vrácená DaysToManufacture hodnota menší než zadané číslo, podmínka je PRAVDA a první zpráva se vytiskne.

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

Chcete-li otestovat proceduru, spusťte proceduru pomocí SalesOrderID``49080, která má jednu komponentu, která vyžaduje 2 dny a dvě komponenty, které vyžadují 0 dní. První příkaz splňuje kritéria. Druhý dotaz ne.

EXECUTE ManyDaysToComplete 49080, 2 ;  

Tady je soubor výsledků.

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

EXECUTE ManyDaysToComplete 49080, 1 ;  

Tady je soubor výsledků.

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

Viz také