Udostępnij za pośrednictwem


Assert Showplan Operator

The Assert operator verifies a condition.Na przykład sprawdza integralność referencyjną lub zapewnia czy Podkwerenda wartość skalarna zwraca jeden wiersz.Dla każdego wiersza wejściowego Assert operator ocenia wyrażenie w Argument kolumnie planu wykonania.Jeśli to wyrażenie ma wartość NULL, zostaje przesłany w wierszu Assert operator i wykonywanie kwerendy w dalszym ciągu. Jeśli to wyrażenie wartości niepustych, zwiększony odpowiednie błąd.

The Assert operator is a physical operator.

Assert operator iconIkona planu wykonywania graficzny

Przykłady

A.Sprawdzanie poprawności jest związane ograniczenie typu CHECK

W poniższym przykładzie aktualizuje wartość Gender kolumna dla IDENTYFIKATORA określonego pracownika w Employee Tabela. Tabela ma ograniczenie typu CHECK, który ogranicza wartości, które są dozwolone kolumna wartości 'F' i m '.Dane wyjściowe plan wykonania kwerend wskazuje, że optymalizator kwerendy używa Assert operator do sprawdzania wartości określone w instrukcja UPDATE przed ograniczenie typu CHECK i wywołuje błąd, gdy nie są spełnione warunki ograniczenia.

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

Wykonanie planu produkcji Assert operator pojawi się poniżej.

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.Sprawdzanie poprawności ograniczenia klucz obcy

W następującym przykładzie usunięto wiersz z Person.Contact Tabela. W takim przypadek istnieje sześć tabel, które tworzą odwołanie klucz obcy do ContactID Kolumna w tej tabela. Dane wyjściowe plan wykonania kwerend wskazuje, że optymalizator kwerendy używa Assert operator do sprawdzania poprawności instrukcja DELETE przed każdym z tych ograniczeń.

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

Wykonanie planu produkcji Assert operator pojawi się poniżej.

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.Sprawdzanie poprawności wartość skalarna podkwerenda

W poniższym przykładzie użyto podkwerenda w klauzula WHERE kwerendy.W tym przykładzie użyto celowo podkwerenda zwraca wiele wierszy, aby wymusić Assert operator podnieść błąd. Dane wyjściowe plan wykonania kwerend wskazuje, że optymalizator kwerendy używa Assert operator, aby zapewnić, że określona w instrukcja SELECT podkwerenda zwraca tylko jeden wiersz.

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

Wykonanie planu produkcji Assert operator pojawi się poniżej.

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

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