共用方式為


Assert Showplan 運算子

更新: 2006 年 4 月 14 日

Assert 運算子會驗證條件。例如,它會驗證參考完整性,或確定純量子查詢傳回一個資料列。Assert 運算子會針對每個輸入資料列來評估執行計劃之 Argument 資料行中的運算式。如果這個運算式評估為 NULL,代表資料列通過 Assert 運算子的驗證,則查詢會繼續執行。如果這個運算式得出非 Null 值,就會引起適當的錯誤。

Assert 運算子是實體運算子。

判斷提示運算子圖示圖形化執行計劃圖示

範例

A. 驗證 CHECK 條件約束

下列範例會在 Employee 資料表中更新指定員工識別碼之 Gender 資料行的值。此資料表具有會將資料行可接受的值限制為 'F' 和 'M' 的 CHECK 條件約束。查詢執行計劃的輸出顯示,查詢最佳化工具會使用 Assert 運算子,針對 CHECK 條件約束驗證 UPDATE 陳述式中指定的值,而在不符合條件約束的條件時引發錯誤。

USE AdventureWorks;
GO
SET NOCOUNT ON;
GO
SET SHOWPLAN_ALL ON;
GO
UPDATE HumanResources.Employee
SET Gender = 'X' WHERE EmployeeID = 1;
GO
SET SHOWPLAN_ALL OFF;
GO

Assert 運算子的執行計劃輸出會出現在下面。

PhysicalOp 
-----------------------------------------------------------------------
Assert

Argument
-----------------------------------------------------------------------
WHERE:(CASE WHEN upper([AdventureWorks].[HumanResources].[Employee].[Gender])<>N'F' AND 
upper([AdventureWorks].[HumanResources].[Employee].[Gender])<>N'M' THEN 
    (0) ELSE NULL END)

B. 驗證 FOREIGN KEY 條件約束

下列範例會從 Person.Contact 資料表中刪除一個資料列。在此情況下,有六個資料表含有此資料表之 ContactID 資料行的外部索引鍵參考。查詢執行計劃的輸出顯示,查詢最佳化工具會使用 Assert 運算子,針對每一個條件約束驗證 DELETE 陳述式。

USE AdventureWorks;
GO
SET NOCOUNT ON;
go
SET SHOWPLAN_ALL ON;
GO
DELETE Person.Contact WHERE ContactID = 1209;
GO
SET SHOWPLAN_ALL OFF;
GO

Assert 運算子的執行計劃輸出會出現在下面。

PhysicalOp 
-----------------------------------------------------------------------
Assert

Argument
-----------------------------------------------------------------------
WHERE:(CASE WHEN NOT [Expr1030] IS NULL THEN (0) ELSE CASE WHEN NOT 
[Expr1031] IS NULL THEN (1) ELSE CASE WHEN NOT [Expr1032] IS NULL THEN 
(2) ELSE CASE WHEN NOT [Expr1033] IS NULL THEN (3) ELSE CASE WHEN NOT 
[Expr1034] IS NULL THEN (4) ELSE CASE WHEN NOT [Expr1035] IS NULL THEN (5) ELSE NULL END END END END END END)

C. 驗證純量子查詢

下列範例在查詢的 WHERE 子句中使用子查詢。此範例刻意使用傳回多個資料列的子查詢來強制 Assert 運算子引發錯誤。查詢執行計劃的輸出顯示,查詢最佳化工具會使用 Assert 運算子,來確保 SELECT 陳述式中指定的子查詢只會傳回單一資料列。

USE AdventureWorks;
GO
SET NOCOUNT ON;
go
SET SHOWPLAN_ALL ON;
GO
SELECT EmployeeID 
FROM HumanResources.Employee
WHERE ContactID = (SELECT ContactID FROM Person.Contact);
GO
SET SHOWPLAN_ALL OFF;
GO
-- Run the query again to display the error message raised by the 
-- Assert Operator.
SELECT EmployeeID 
FROM HumanResources.Employee
WHERE ContactID = (SELECT ContactID FROM Person.Contact);
GO

Assert 運算子的執行計劃輸出會出現在下面。

PhysicalOp 
-----------------------------------------------------------------------
Assert

Argument
-----------------------------------------------------------------------
WHERE:(CASE WHEN [Expr1007]>(1) THEN (0) ELSE NULL END)

請參閱

工作

如何:顯示實際執行計劃

概念

邏輯與實體運算子參考
使用 Showplan SET 選項來顯示執行計劃 (Transact-SQL)

說明及資訊

取得 SQL Server 2005 協助

變更歷程記錄

版本 歷程記錄

2006 年 4 月 14 日

新增內容:
  • 新增「範例」一節。