ALL (Transact-SQL)
比較純量值與單一資料行集的值。
適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure SQL 資料庫 (初始版本,透過目前版本)。 |
語法
scalar_expression { = | <> | != | > | >= | !> | < | <= | !< } ALL ( subquery )
引數
scalar_expression
這是任何有效的運算式。{ = | <> | != | > | >= | !> | < | <= | !< }
這是一個比較運算子。subquery
這是傳回單一資料行結果集的子查詢。 傳回的資料行資料類型必須與 scalar_expression 的資料類型相同。這是一個受限制的 SELECT 陳述式,其中不允許使用 ORDER BY 子句和 INTO 關鍵字。
結果類型
Boolean
結果值
當各組 (scalar_expression**,** x) 的指定比較都是 TRUE 時,其中 x 是單一資料行集中的值,便傳回 TRUE;否則,便傳回 FALSE。
備註
ALL 需要正面比較 scalar_expression 與每個子查詢傳回值。 例如,如果子查詢傳回 2 和 3 的值,scalar_expression <= ALL (子查詢) 會針對 scalar_expression 等於 2 評估為 TRUE。 如果子查詢傳回 2 和 3 兩個值,scalar_expression = ALL (子查詢) 會評估為 FALSE,因為部分子查詢的值 (即值 3) 不符合運算式的準則。
如需有關需要正面比較 scalar_expression 和僅單一子查詢傳回值的陳述式,請參閱<SOME | ANY (Transact-SQL)>。
此主題中所使用的子查詢都是指 ALL。 ALL 也可以配合 UNION 和 SELECT 來使用。
範例
下列範例會建立預存程序,以判斷 AdventureWorks2012 資料庫中所指定 SalesOrderID 的所有組件,是否都可以在指定的天數內製造出來。 這個範例會使用子查詢,針對特定 SalesOrderID 的所有組件建立一份 DaysToManufacture 值數目的清單,然後確認所有 DaysToManufacture 都在指定的天數範圍內。
USE AdventureWorks2012 ;
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 ;
以下為結果集:
All items for this order can be manufactured in specified number of days or less.
EXECUTE DaysToBuild 49080, 1 ;
以下為結果集:
Some items for this order cannot be manufactured in specified number of days or less.