Поделиться через


ALL (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

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

Аргументы

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

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

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

Ограниченная инструкция SELECT, в которой запрещено предложение ORDER BY, а также ключевое слово 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 (subquery) будет возвращаться FALSE, так как некоторые значения вложенного запроса (значение 3) могут не отвечать критериям этого выражения.

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

Чтобы узнать, как сравнить равенство двух выражений и гарантировать истинный или ложный результат, см. статью IS [NOT] DISTINCT FROM (Transact-SQL).

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

Примеры

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

-- Uses AdventureWorks

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 can''t be manufactured in specified number of days or less.' ;  

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

EXECUTE DaysToBuild 49080, 2 ;  

Вот результирующий набор.

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

EXECUTE DaysToBuild 49080, 1 ;  

Вот результирующий набор.

Some items for this order can't be manufactured in specified number of days or less.

См. также