SOME | ANY (Transact-SQL)

S’applique à :SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Compare une valeur scalaire avec un ensemble de valeurs appartenant à une seule colonne. SOME et ANY sont équivalents.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Remarque

Pour afficher la syntaxe Transact-SQL pour SQL Server 2014 et versions antérieures, consultez Versions antérieures de la documentation.

Arguments

scalar_expression
Toute expression valide.

{ = | <> | != | > | >= | !> | < | <= | !< }
Tout opérateur de comparaison valide.

SOME | ANY

Spécifie qu'il convient d'effectuer une comparaison.

subquery

Sous-requête avec un jeu de résultats d'une colonne. Le type de données de la colonne renvoyée doit correspondre à celui de scalar_expression.

Types des résultats

Booléen

Valeur de résultat

SOME ou ANY retourne la valeur TRUE quand la comparaison spécifiée a la valeur TRUE pour une paire (scalar_expression, x) où x est une valeur du jeu de valeurs sur une seule colonne ; dans le cas contraire, la valeur FALSE est retournée.

Notes

SOME nécessite que scalar_expression corresponde à au moins une valeur retournée par la sous-requête. Pour les instructions qui nécessitent que l’argument scalar_expression corresponde à toutes les valeurs retournées par la sous-requête, consultez TOUS (Transact-SQL). Par exemple, si la sous-requête retourne les valeurs 2 et 3, scalar_expression = SOME (sous-requête) prend la valeur TRUE pour une scalar_expression égale à 2. Si la sous-requête retourne les valeurs 2 et 3, l’instruction scalar_expression = ALL (sous-requête) donne FALSE, étant donné que certaines des valeurs de la sous-requête (à savoir 3) ne répondent pas aux critères de l’expression.

Exemples

R. Exécution d'un exemple simple

Les instructions suivantes créent une table simple et ajoutent les valeurs 1, 2, 3 et 4 à la colonne ID.

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

La requête suivante renvoie TRUE car 3 est inférieur à certaines des valeurs de la table.

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

La requête suivante retourne FALSE, car 3 n'est pas inférieur à toutes les valeurs de la table.

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

B. Exécution d'un exemple pratique

L’exemple suivant crée une procédure stockée qui détermine si tous les composants d’un SalesOrderID spécifié dans la base de données AdventureWorks2012 peuvent être fabriqués dans le délai du nombre de jours spécifié. L'exemple utilise une sous-requête pour créer une liste du nombre de DaysToManufacture pour tous les composants du SalesOrderID spécifié, puis vérifie si parmi les valeurs retournées par la sous-requête certaines sont supérieures au nombre de jours spécifié. Si chaque valeur retournée pour DaysToManufacture est inférieure au nombre fourni, la condition a la valeur TRUE et le premier message est imprimé.

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

Pour tester la procédure, exécutez-la en utilisant le SalesOrderID``49080 dont l’un des composants demande 2 jours de fabrication, tandis que les 2 autres en demandent 0. La première instruction remplit les critères, Ce n’est pas le cas de la deuxième requête.

EXECUTE ManyDaysToComplete 49080, 2 ;  

Voici le jeu de résultats obtenu.

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

EXECUTE ManyDaysToComplete 49080, 1 ;  

Voici le jeu de résultats obtenu.

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

Voir aussi