Оператор Assert инструкции Showplan

Изменения: 14 апреля 2006 г.

Оператор Assert проверяет условие. Например, этот оператор проверяет целостность ссылок или гарантирует, что скалярный вложенный запрос возвращает одну строку. Для каждой входной строки оператор Assert вычисляет выражение в столбце Аргумент плана выполнения. Если значением этого выражения является NULL, строка передается через оператор Assert и выполнение запроса продолжается. При значении этого выражения, отличном от NULL, будет выдана соответствующая ошибка.

Assert является физическим оператором.

Значок оператора AssertЗначок графического плана выполнения

Примеры

А. Проверка ограничения CHECK

В следующем примере обновляется значение в столбце Gender для заданного идентификатора служащего в таблице Employee. В таблице имеется ограничение CHECK, устанавливающее в качестве допустимых значений для столбца «F» и «M». Выходные данные плана выполнения запроса показывают, что оптимизатор запросов использует оператор Assert для сравнения значения, заданного в инструкции UPDATE, с ограничением CHECK и формирует ошибку, если условия ограничения не соблюдаются.

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)

Б. Проверка ограничения 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)

В. Проверка скалярного вложенного запроса

В следующем примере в предложении 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

Журнал изменений

Версия Журнал

14 апреля 2006 г.

Новое содержимое
  • Добавлен раздел «Примеры».