SOME | ANY (Transact-SQL)SOME | ANY (Transact-SQL)

ОБЛАСТЬ ПРИМЕНЕНИЯ:даSQL Server (начиная с 2008)даБаза данных SQL AzureдаХранилище данных SQL AzureнетParallel Data WarehouseAPPLIES TO: yesSQL Server (starting with 2008) yesAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

Сравнивает скалярное значение с набором значений, состоящим из одного столбца.Compares a scalar value with a single-column set of values. Ключевые слова SOME и ANY эквивалентны.SOME and ANY are equivalent.

Значок ссылки на раздел Синтаксические обозначения в Transact-SQLTopic link icon Transact-SQL Syntax Conventions

СинтаксисSyntax

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

АргументыArguments

scalar_expressionscalar_expression
Любое допустимое выражение expression.Is any valid expression.

{ = | <> | != | > | >= | !> | < | <= | !< }{ = | <> | != | > | >= | !> | < | <= | !< }
Любой допустимый оператор сравнения.Is any valid comparison operator.

SOME | ANYSOME | ANY
Указывает на необходимость сравнения.Specifies that a comparison should be made.

subquerysubquery
Вложенный запрос, содержащий результирующий набор, состоящий из одного столбца.Is a subquery that has a result set of one column. Тип данных возвращаемого столбца должен совпадать с типом данных аргумента scalar_expression.The data type of the column returned must be the same data type as scalar_expression.

Типы результатаResult Types

BooleanBoolean

Значение результатаResult Value

При использовании ключевого слова SOME или ANY значение TRUE возвращается, если указанное сравнение имеет значение TRUE для любой пары (scalar_expression , x), где x является одним из значений набора из одного столбца; иначе возвращается значение FALSE.SOME or ANY returns TRUE when the comparison specified is TRUE for any pair (scalar_expression,x) where x is a value in the single-column set; otherwise, returns FALSE.

RemarksRemarks

Для ключевого слова SOME необходим аргумент scalar_expression, чтобы провести непосредственное сравнение по крайней мере одного значения, возвращенного вложенным запросом.SOME requires the scalar_expression to compare positively to at least one value returned by the subquery. Инструкции, которым необходим аргумент scalar_expression для сравнения каждого значения, возвращенного вложенным запросом, перечислены в разделе ALL (Transact-SQL).For statements that require the scalar_expression to compare positively to every value that is returned by the subquery, see ALL (Transact-SQL). Например, если вложенный запрос возвращает значения 2 и 3, то при значении scalar_expression = SOME (subquery) для выражения scalar_express, равного 2, будет возвращаться TRUE.For instance, if the subquery returns values of 2 and 3, scalar_expression = SOME (subquery) would evaluate as TRUE for a scalar_express of 2. Если вложенный запрос возвращает значения 2 и 3, то при scalar_expression = ALL (subquery) будет возвращаться FALSE, так как некоторые значения вложенного запроса (значение 3) могут не отвечать критериям этого выражения.If the subquery returns values of 2 and 3, scalar_expression = ALL (subquery) would evaluate as FALSE, because some of the values of the subquery (the value of 3) wouldn't meet the criteria of the expression.

ПримерыExamples

A.A. Выполнение простого примераRunning a simple example

Следующие инструкции создают простую таблицу и добавляют значения 1, 2, 3 и 4 в столбец ID.The following statements create a simple table and add the values of 1, 2, 3, and 4 to the ID column.

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

Следующий запрос возвращает значение TRUE, так как 3 меньше некоторых из значений в таблице.The following query returns TRUE because 3 is less than some of the values in the table.

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

Следующий запрос возвращает значение FALSE, так как 3 не меньше каждого из значений в таблице.The following query returns FALSE because 3 isn't less than all of the values in the table.

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

Б.B. Выполнение практического примераRunning a practical example

В приведенном ниже примере показано создание хранимой процедуры, определяющей, могут ли в течение заданного количества дней быть выполнены все части заказа с указанным идентификатором SalesOrderID из базы данных AdventureWorks2012.The following example creates a stored procedure that determines whether all the components of a specified SalesOrderID in the AdventureWorks2012 database can be manufactured in the specified number of days. В этом примере для создания списка количества значений DaysToManufacture для всех компонентов SalesOrderID используется вложенный запрос, а затем проводится проверка того, превышают ли все значения, возвращаемые вложенным запросом, указанное количество дней.The example uses a subquery to create a list of the number of DaysToManufacture value for all the components of the specific SalesOrderID, and then tests whether any of the values that are returned by the subquery are greater than the number of days specified. Если каждое возвращаемое значение DaysToManufacture меньше заданного значения, то условие равно TRUE и печатается первое сообщение.If every value of DaysToManufacture that is returned is less than the number provided, the condition is TRUE and the first message is printed.

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

Для проверки этой процедуры выполните ее, используя SalesOrderID``49080, имеющий один компонент, требующий на выполнение 2 дня, и два компонента, требующих немедленного выполнения.To test the procedure, execute the procedure by using the SalesOrderID``49080, which has one component that requires 2 days and two components that require 0 days. Первая инструкция отвечает этим критериям.The first statement meets the criteria. Второй запрос — нет.The second query doesn't.

EXECUTE ManyDaysToComplete 49080, 2 ;  

Ниже приводится результирующий набор.Here is the result set.

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

EXECUTE ManyDaysToComplete 49080, 1 ;  

Ниже приводится результирующий набор.Here is the result set.

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

См. также:See Also

ALL (Transact-SQL) ALL (Transact-SQL)
CASE (Transact-SQL) CASE (Transact-SQL)
Встроенные функции (Transact-SQL) Built-in Functions (Transact-SQL)
Операторы (Transact-SQL) Operators (Transact-SQL)
SELECT (Transact-SQL) SELECT (Transact-SQL)
WHERE (Transact-SQL) WHERE (Transact-SQL)
IN (Transact-SQL)IN (Transact-SQL)