SOME | ANY (Transact-SQL)

Confronta un valore scalare con un set di valori a colonna singola. SOME e ANY sono equivalenti.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

Argomenti

  • scalar_expression
    Qualsiasi espressione valida.

  • { = | <> | != | > | >= | !> | < | <= | !< }
    Qualsiasi operatore di confronto valido.

  • SOME | ANY
    Specifica che deve essere eseguito un confronto.

  • subquery
    Sottoquery che include un set di risultati con una sola colonna. Il tipo di dati della colonna restituita deve corrispondere a quello dell'espressione scalar_expression.

Tipi restituiti

Boolean

Valore restituito

SOME o ANY restituisce TRUE se il confronto specificato è TRUE per almeno una coppia (scalar_expression**,**x), dove x è un valore del set di valori a colonna singola. In caso contrario, restituisce FALSE.

Osservazioni

SOME specifica che l'argomento scalar_expression deve essere confrontato in modo univoco almeno con un valore restituito dalla sottoquery. Per le istruzioni che specificano che scalar_expression deve essere confrontato in modo univoco con ogni valore restituito dalla sottoquery, vedere ALL (Transact-SQL). Se, ad esempio, la sottoquery restituisce i valori 2 e 3, scalar_expression = SOME (sottoquery) restituisce TRUE se il valore di scalar_express è 2. Se la sottoquery restituisce i valori 2 e 3, scalar_expression = ALL (sottoquery) restituisce FALSE, in quanto alcuni valori della sottoquery (il valore 3) non soddisfano i criteri dell'espressione.

Esempi

A. Esempio semplice

Le istruzioni seguenti consentono di creare una tabella semplice e di aggiungere i valori 1, 2, 3 e 4 alla colonna ID.

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

Nella query seguente viene restituito TRUE perché 3 è inferiore ad alcuni valori della tabella.

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

Nella query seguente viene restituito FALSE perché 3 non è inferiore a tutti i valori della tabella.

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

B. Esempio pratico

Nell'esempio seguente viene creata una stored procedure che determina se tutti i componenti di una colonna SalesOrderID specificata nel database AdventureWorks possono essere prodotti nel numero di giorni indicato. Nell'esempio viene utilizzata una sottoquery per creare un elenco contenente i numeri corrispondenti ai valori di DaysToManufacture per tutti i componenti della colonna SalesOrderID specifica e viene quindi verificato se alcuni dei valori restituiti dalla sottoquery sono maggiori del numero di giorni specificato. Se ogni valore di DaysToManufacture restituito è minore del numero specificato, la condizione è TRUE e viene stampato il primo messaggio.

USE AdventureWorks ;
GO

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

Per testare la procedura, eseguirla utilizzando il valore 49080 di SalesOrderID, a cui sono associati un componente che richiede 2 giorni e due componenti che richiedono 0 giorni. La prima istruzione, di seguito, soddisfa i criteri, mentre la seconda no.

EXECUTE ManyDaysToComplete 49080, 2 ;

Set di risultati:

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

EXECUTE ManyDaysToComplete 49080, 1 ;

Set di risultati:

At least one item for this order cannot be manufactured in specified number of days.