ALL (Transact-SQL)

适用于: SQL Server Azure SQL 数据库 Azure SQL 托管实例

比较标量值和单列集中的值。

Transact-SQL 语法约定

语法

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

参数

scalar_expression
为任意有效的表达式


一个比较运算符。

subquery
返回单列结果集的子查询。 返回列的数据类型必须与 scalar_expression 的数据类型相同 。

受限的 SELECT 语句,其中不允许使用 ORDER BY 子句和 INTO 关键字。

结果类型

布尔值

结果值

如果指定的比较对于所有比较对 (scalar_expression, x) 均为 TRUE(其中 x 是单列集中的值),则返回 TRUE。 否则返回 False 。

备注

ALL 要求 scalar_expression 与子查询返回的每个值进行比较时都应满足比较条件 。 例如,如果子查询返回的值为 2 和 3,则对于值为 2 的 scalar_expression,scalar_expression <= ALL(子查询)的计算结果为 TRUE。 如果子查询返回值 2 和 3,scalar_expression = ALL(子查询)的计算结果为 FALSE,因为子查询的某些值(值 3)不符合表达式的条件。

有关要求 scalar_expression 只与子查询返回的某一个值比较时满足比较条件的语句,请参阅 SOME | ANY (Transact-SQL)

要比较两个表达式是否相等并保证结果为真或假,请参阅 IS [NOT] DISTINCT FROM (Transact-SQL)

本文讨论了 ALL 用于子查询的情况。 ALL 也可以与 UNIONSELECT 一起使用。

示例

以下示例创建一个存储过程,该存储程确定是否能够在指定的天数内制造出 AdventureWorks2022 数据库中具有指定 SalesOrderID 的所有组件。 该示例使用子查询为具有特定 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.

另请参阅