SOME | ANY (Transact-SQL)

Actualizado: 17 de julio de 2006

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

Icono de vínculo a temas Convenciones de sintaxis de Transact-SQL


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

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 con un conjunto de resultados de una columna. El tipo de datos de la columna devuelta debe ser el mismo que el de scalar_expression.

SOME requiere que la scalar_expression se compare de forma positiva con al menos un valor devuelto por la subconsulta. Para instrucciones que requieren que scalar_expression se compare de forma positiva con cada 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_express 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ía los criterios de la expresión.

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

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

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

Para probar el procedimiento, ejecútelo utilizando 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 los cumple.

EXECUTE DaysToBuild 49080, 2 ;

Éste es el conjunto de resultados.

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

EXECUTE DaysToBuild 49080, 1 ;

Éste es el conjunto de resultados.

Some items for this order cannot be manufactured in specified number of days or less.

Versión Historial

17 de julio de 2006

Contenido nuevo:
  • Se ha agregado la sección Notas.
  • Se ha agregado el ejemplo.

Adiciones de comunidad

AGREGAR
Mostrar: