ALL (Transact-SQL)

Сравнивает скалярное значение с результирующим набором, состоящим из одного столбца.

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

Синтаксис

scalar_expression { = | <> | != | > | >= | !> | < | <= | !< } ALL ( subquery )

Аргументы

  • scalar_expression
    Любое допустимое выражение.

  • { = | <> | != | > | >= | !> | < | <= | !< }
    Оператор сравнения.

  • subquery
    Вложенный запрос, возвращающий результирующий набор, состоящий из одного столбца. Тип данных возвращаемого столбца должен совпадать с типом данных аргумента scalar_expression.

    Ограниченная инструкция SELECT, в которой запрещены предложения ORDER BY и COMPUTE, а также ключевое слово INTO.

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

Boolean

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

Возвращает TRUE, если заданное сравнение возвращает TRUE для всех пар (scalar_expression**,**x), где x является значением из набора строк, состоящего из одного столбца; в противном случае возвращает FALSE.

Замечания

Если аргумент scalar_expression установлен в значение ALL, будет выполнено сравнение каждого значения, возвращаемого вложенным запросом. Например, если вложенный запрос возвращает значения 2 и 3, то при scalar_expression <= ALL будет возвращаться TRUE для значения scalar_expression, равного 2. Если вложенный запрос возвращает значения 2 и 3, то при scalar_expression = ALL будет возвращаться FALSE, так как некоторые значения вложенного запроса (значение 3) не отвечают критериям этого выражения.

Инструкции, которым необходим аргумент scalar_expression для сравнения только одного значения, возвращаемого вложенным запросом, перечислены в разделе SOME | ANY (Transact-SQL).

В этом разделе имеются ссылки на выражение ALL при его использовании совместно с вложенными запросами. Выражение ALL может также использоваться с инструкциями UNION и SELECT.

Примеры

В следующем примере показано создание хранимой процедуры, определяющей, могут ли в течение заданного количества дней быть выполнены все заказы с указанным идентификатором SalesOrderID из базы данных AdventureWorks2008R2. В этом примере вложенный запрос используется для создания списка числовых значений DaysToManufacture для всех заказов с указанным идентификатором SalesOrderID, после чего происходит проверка того, что время производства всех заказов (DaysToManufacture) находится в пределах указанного числа дней.

USE AdventureWorks2008R2 ;
GO

CREATE PROCEDURE DaysToBuild @OrderID int, @NumberOfDays int
AS
IF 
@NumberOfDays >= ALL
   (
    SELECT DaysToManufacture
    FROM Sales.SalesOrderDetail
    JOIN Production.Product 
    ON Sales.SalesOrderDetail.ProductID = Production.Product.ProductID 
    WHERE SalesOrderID = @OrderID
   )
PRINT 'All items for this order can be manufactured in specified number of days or less.'
ELSE 
PRINT 'Some items for this order cannot be manufactured in specified number of days or less.' ;

Для проверки этой процедуры выполните ее, используя заказ SalesOrderID 49080. В него входит один компонент, производство которого занимает 2 дня, и два компонента, производство которых занимает 0 дней. Первая из нижеследующих инструкций отвечает этим критериям. Второй запрос этим критериям не отвечает.

EXECUTE DaysToBuild 49080, 2 ;

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

Все изделия для данного заказа могут быть изготовлены за указанное число дней или быстрее.

EXECUTE DaysToBuild 49080, 1 ;

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

Некоторые изделия для данного заказа не могут быть изготовлены за указанное число дней или быстрее.