Оператор Assert инструкции Showplan
Изменения: 14 апреля 2006 г.
Оператор Assert проверяет условие. Например, этот оператор проверяет целостность ссылок или гарантирует, что скалярный вложенный запрос возвращает одну строку. Для каждой входной строки оператор Assert вычисляет выражение в столбце Аргумент плана выполнения. Если значением этого выражения является NULL, строка передается через оператор Assert и выполнение запроса продолжается. При значении этого выражения, отличном от NULL, будет выдана соответствующая ошибка.
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 г. |
|