Operatore Showplan Assert
Data aggiornamento: 14 aprile 2006
L'operatore Assert verifica una condizione, ad esempio convalida l'integrità referenziale oppure verifica che una subquery scalare restituisca una riga. Per ogni riga di input, l'operatore Assert valuta l'espressione nella colonna Argument del piano di esecuzione. Se questa espressione restituisce NULL, la riga viene passata tramite l'operatore Assert e l'esecuzione della query procede. Se l'operazione restituisce un valore non NULL, verrà generato l'errore appropriato.
Assert è un operatore fisico.
Icona del piano di esecuzione grafico
Esempi
A. Convalida di un vincolo CHECK
Nell'esempio seguente viene aggiornato il valore della colonna Gender
per un ID di dipendente specificato nella tabella Employee
. La tabella include un vincolo CHECK che limita i valori consentiti nella colonna ai valori 'F' e 'M'. L'output del piano di esecuzione della query mostra che Query Optimizer utilizza l'operatore Assert per convalidare il valore specificato nell'istruzione UPDATE per il vincolo CHECK e genera un errore quando le condizioni del vincolo non vengono soddisfatte.
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
L'output del piano di esecuzione dell'operatore Assert è il seguente.
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. Convalida di un vincolo FOREIGN KEY
Nell'esempio seguente viene eliminata una riga dalla tabella Person.Contact
. Esistono sei tabelle con un riferimento di chiave esterna alla colonna ContactID
di questa tabella. L'output del piano di esecuzione della query mostra che Query Optimizer utilizza l'operatore Assert per convalidare l'istruzione DELETE per ogni vincolo.
USE AdventureWorks;
GO
SET NOCOUNT ON;
go
SET SHOWPLAN_ALL ON;
GO
DELETE Person.Contact WHERE ContactID = 1209;
GO
SET SHOWPLAN_ALL OFF;
GO
L'output del piano di esecuzione dell'operatore Assert è il seguente.
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. Convalida di una subquery scalare
Nell'esempio seguente viene utilizzata una subquery nella clausola WHERE della query. Viene utilizzata intenzionalmente una subquery che restituisce più righe per forzare l'operatore Assert a generare un errore. L'output del piano di esecuzione della query mostra che Query Optimizer utilizza l'operatore Assert per assicurare che la subquery specificata nell'istruzione SELECT restituisca solo una riga singola.
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
L'output del piano di esecuzione dell'operatore Assert è il seguente.
PhysicalOp
-----------------------------------------------------------------------
Assert
Argument
-----------------------------------------------------------------------
WHERE:(CASE WHEN [Expr1007]>(1) THEN (0) ELSE NULL END)
Vedere anche
Attività
Procedura: Visualizzazione di un piano di esecuzione effettivo
Concetti
Guida di riferimento agli operatori logici e fisici
Visualizzazione di piani di esecuzione tramite le opzioni SET SHOWPLAN (Transact-SQL)
Guida in linea e informazioni
Cronologia modifiche
Versione | Cronologia |
---|---|
14 aprile 2006 |
|