SOME | ANY (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure
Confronta un valore scalare con un set di valori a colonna singola. SOME e ANY sono equivalenti.
Convenzioni relative alla 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 di una colonna. Il tipo di dati della colonna restituita deve corrispondere a quello di scalar_expression.
Tipi restituiti
Booleano
Valore restituito
SOME o ANY restituisce TRUE se il confronto specificato è TRUE per qualsiasi 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 con almeno un valore restituito dalla sottoquery. Per le istruzioni che specificano che l'argomento 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 (subquery) restituisce TRUE se il valore di scalar_expression è 2. Se la sottoquery restituisce i valori 2 e 3, scalar_expression = ALL (subquery) restituisce FALSE, perché alcuni valori della sottoquery (il valore 3) non soddisfano i criteri dell'espressione.
Esempi
R. Esecuzione di un esempio semplice
Le istruzioni seguenti consentono di creare una tabella semplice e di aggiungere i valori di 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' ;
La query seguente restituisce FALSE
perché 3
non è inferiore a tutti i valori nella tabella.
IF 3 < ALL (SELECT ID FROM T1)
PRINT 'TRUE'
ELSE
PRINT 'FALSE' ;
B. Esecuzione di un esempio pratico
Nell'esempio seguente viene creata una stored procedure che determina se tutti i componenti di una colonna SalesOrderID
specificata nel database AdventureWorks2022
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.
-- 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.' ;
Per testare la procedura, eseguirla usando il valore SalesOrderID``49080
, a cui sono associati un componente che richiede 2
giorni e due componenti che richiedono 0 giorni. La prima istruzione soddisfa i criteri, la seconda query no.
EXECUTE ManyDaysToComplete 49080, 2 ;
Il set di risultati è il seguente.
All items for this order can be manufactured in the specified number of days or less.
EXECUTE ManyDaysToComplete 49080, 1 ;
Il set di risultati è il seguente.
At least one item for this order can't be manufactured in specified number of days.