SOME | ANY (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance

Compara un valor escalar con un conjunto de valores de una sola columna. SOME y ANY son equivalentes.

Convenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

scalar_expression
Es cualquier expresión válida.

{ = | <> | != | > | >= | !> | < | <= | !< }
Es cualquier operador de comparación válido.

SOME | ANY

Especifica que se debe realizar una comparación.

subquery

Es una subconsulta que tiene un conjunto de resultados de una columna. El tipo de datos de la columna devuelta debe ser el mismo que el de scalar_expression.

Tipos de resultado

Boolean

Valor del resultado

SOME o ANY devuelven TRUE cuando la comparación especificada es TRUE para todos los pares (scalar_expression, x), donde x es un valor del conjunto de una sola columna; en caso contrario, devuelve FALSE.

Observaciones

SOME requiere que la scalar_expression se compare de forma positiva con al menos un valor devuelto por la subconsulta. Para ver instrucciones que requieren que scalar_expression se compare de forma positiva con solo un valor devuelto por la subconsulta, vea ALL (Transact-SQL). Por ejemplo, si la subconsulta devuelve los valores 2 y 3, scalar_expression = SOME (subconsulta) se evaluaría como TRUE para una scalar_expression de 2. Si la subconsulta devuelve los valores 2 y 3, scalar_expression = ALL (subconsulta) se evaluaría como FALSE, porque algunos de los valores de la subconsulta (el valor 3) no cumplirían los criterios de la expresión.

Ejemplos

A. Ejecutar un ejemplo sencillo

Las instrucciones siguientes crean una tabla simple y agregan los valores 1, 2, 3 y 4 a la columna de ID.

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

La consulta siguiente devuelve TRUE porque 3 es menor que alguno de los valores de la tabla.

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

La consulta siguiente devuelve FALSE porque 3 no es menor que todos los valores de la tabla.

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

B. Ejecutar un ejemplo práctico

En el ejemplo siguiente se crea un procedimiento almacenado que determina si todos los componentes de un SalesOrderID especificado en la base de datos AdventureWorks2022 se pueden fabricar en el número de días especificado. En el ejemplo se usa una subconsulta para crear una lista de valores de DaysToManufacture para todos los componentes del SalesOrderID especificado y, a continuación, se comprueba si alguno de los valores devueltos por la subconsulta es mayor que el número de días especificado. Si cada valor de DaysToManufacture que se devuelve es menor que el número proporcionado, la condición es TRUE y se imprime el primer mensaje.

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

Para probar el procedimiento, ejecútelo usando SalesOrderID``49080, que tiene un componente que requiere 2 días y dos componentes que requieren 0 días. La primera instrucción cumple los criterios. La segunda consulta no.

EXECUTE ManyDaysToComplete 49080, 2 ;  

Este es el conjunto de resultados.

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

EXECUTE ManyDaysToComplete 49080, 1 ;  

Este es el conjunto de resultados.

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

Consulte también