Opérateur Showplan Assert

Mis à jour : 14 avril 2006

L'opérateur Assert vérifie une condition. Il valide, par exemple, l'intégrité référentielle ou s'assure qu'une sous-requête scalaire retourne une ligne. Pour chaque ligne d'entrée, l'opérateur Assert résout l'expression de la colonne Argument du plan d'exécution. Si cette expression a pour résultat NULL, l'opérateur Assert passe la ligne et la requête d'exécution se poursuit. Si la valeur de cette expression n'est pas NULL, l'erreur adéquate sera générée.

L'opérateur Assert est un opérateur physique.

Icône d'opérateur AssertIcône du plan d'exécution graphique

Exemples

A. Validation d'une contrainte CHECK

L'exemple suivant met à jour la valeur dans la colonne Gender pour un ID d'employé spécifié dans la table Employee. La table possède une contrainte CHECK qui limite les valeurs qui sont acceptées dans la colonne aux valeurs 'F' et 'M'. La sortie du plan d'exécution de la requête indique que l'optimiseur de requête utilise l'opérateur Assert pour valider la valeur spécifiée dans l'instruction UPDATE par rapport à la contrainte CHECK et génère une erreur si les conditions de la contrainte ne sont pas satisfaites.

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

La sortie du plan d'exécution de l'opérateur Assert est affichée ci-dessous.

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. Validation d'une contrainte FOREIGN KEY

L'exemple ci-dessous supprime une ligne de la table Person.Contact. Dans ce cas, il existe six tables qui possèdent une référence de clé étrangère à la colonne ContactID de cette table. La sortie du plan d'exécution de la requête indique que l'optimiseur de requête utilise l'opérateur Assert pour valider l'instruction DELETE par rapport à chaque contrainte.

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

La sortie du plan d'exécution de l'opérateur Assert est affichée ci-dessous.

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. Validation d'une sous-requête scalaire

L'exemple suivant utilise une sous-requête dans la clause WHERE de la requête. Cet exemple utilise intentionnellement une sous-requête qui retourne plusieurs lignes pour forcer l'opérateur Assert à générer une erreur. La sortie du plan d'exécution de la requête indique que l'optimiseur de requête utilise l'opérateur Assert pour vérifier que la sous-requête spécifiée dans l'instruction SELECT retourne uniquement une ligne.

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

La sortie du plan d'exécution de l'opérateur Assert est affichée ci-dessous.

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

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

Voir aussi

Tâches

Procédure : afficher un plan d'exécution réel

Concepts

Référence des opérateurs physiques et logiques
Affichage des plans d'exécution à l'aide des options Showplan SET (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005

Historique des modifications

Version Historique

14 avril 2006

Nouveau contenu :
  • Ajout de la section Exemples.