Udostępnij za pośrednictwem


Potwierdzaj operatora Showplan

Assert Operator sprawdza warunek.Na przykład sprawdzania integralność referencyjnej lub zapewnia, że wartość skalarna podzapytanie zwraca jeden wiersz.Dla każdego wiersza wejściowego Assert operator ocenia wyrażenie w argumentu kolumna plan wykonania.Jeśli wyrażenie to null, wiersz ten jest przekazywany przez Assert operator i wykonanie kwerendy kontynuuje.Jeśli wyrażenie to wartości niepustych, odpowiednie błąd będzie uruchamiany.

Assert Jest operator operator fizycznej.

Ikona operatora potwierdzeniaGraficzne wykonanie planu ikony

Przykłady

A.Sprawdzanie poprawności ograniczenia CHECK

Poniższy przykład aktualizuje wartość Gender kolumna identyfikatora pracownika określonego w Employee tabela.Tabela ma ograniczenie typu CHECK, który ogranicza wartości, które są dozwolone kolumna wartości 'F' i am ".Wyjście plan wykonania kwerend pokazuje, że optymalizator kwerendy używa Assert operator do sprawdzania wartości określone w instrukcja UPDATE przeciwko ograniczenia CHECK i zgłasza błąd, gdy warunki ograniczenia są nie frędzlami

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

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

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

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

B.Sprawdzanie poprawności ograniczenia na klucz OBCY

W następującym przykładzie usunięto wiersz z Person.Person tabela.W takim przypadek istnieje sześć tabele, które mają klucz obcy odniesienie do BusinessEntityID kolumna w tabela.Wyjście plan wykonania kwerend pokazuje, że optymalizator kwerendy używa Assert operator do sprawdzania poprawności Instrukcja DELETE w odniesieniu do każdego z tych ograniczeń.

USE AdventureWorks2008R2;
GO
SET NOCOUNT ON;
go
SET SHOWPLAN_ALL ON;
GO
DELETE Person.Person WHERE BusinessEntityID = 1209;
GO
SET SHOWPLAN_ALL OFF;
GO

Wykonanie planu produkcji Assert operator pojawia 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 podzapytanie

W poniższym przykładzie użyto podzapytanie w klauzula WHERE kwerendy.W tym przykładzie użyto celowo podzapytanie zwraca wiele wierszy, aby wymusić Assert operator podnieść błąd.Wyjście plan wykonania kwerend pokazuje, że optymalizator kwerendy używa Assert operator, aby zapewnić, że określona w instrukcja SELECT podzapytanie tylko zwraca pojedynczy wiersz.

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

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

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

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