Dans SQL Server, si vous essayez de supprimer un objet qui n'existe pas, vous obtiendrez une erreur. Si vous ne voulez pas obtenir d'erreur, vous devrez ajouter du code supplémentaire pour vérifier l'existence de l'objet.
Avant SQL Server 2016, vous deviez ajouter un IF
instruction qui interrogeait les objets système pertinents pour savoir si l'objet existait ou non.
À partir de SQL Server 2016, vous pouvez désormais utiliser une nouvelle méthode plus propre pour vérifier si un objet existe. Nous l'appellerons DROP IF EXISTS
(autrement connu sous le nom de "DIE").
Exemple 1 – Syntaxe de base
La syntaxe ne contient pas réellement le DROP IF EXISTS
chaîne telle quelle. Ce que vous devez faire est d'insérer le type d'objet entre DROP
et IF
.
DROP TABLE IF EXISTS Customers
Dans ce cas, je supprime une table, donc le mot TABLE
est inséré entre DROP
et IF
. Le nom de la table que je veux supprimer (dans ce cas Clients ) est placé à la fin.
Exemple 2 - Démo de base
Voici un exemple de création d'une base de données, puis de suppression, puis de tentative de suppression à nouveau.
CREATE DATABASE Homer; GO DROP DATABASE IF EXISTS Homer; GO DROP DATABASE IF EXISTS Homer; GO
Résultat :
Started executing query at Line 17 Commands completed successfully. Started executing query at Line 19 Commands completed successfully. Started executing query at Line 21 Commands completed successfully.
Aucune erreur ne se produit, même si j'essaie de déposer un objet inexistant sur la troisième ligne.
Exemple 3 – Sans IF EXISTS
Le revoici, sauf que cette fois j'enlève le IF EXISTS
partie.
CREATE DATABASE Homer; GO DROP DATABASE Homer; GO DROP DATABASE Homer; GO
Résultat :
Started executing query at Line 17 Commands completed successfully. Started executing query at Line 19 Commands completed successfully. Started executing query at Line 21 Msg 3701, Level 11, State 1, Line 5 Cannot drop the database 'Homer', because it does not exist or you do not have permission.
Dans ce cas, j'obtiens une erreur, car il essaie de supprimer un objet qui n'existe pas.
Exemple 4 - Colonnes et contraintes
Vous pouvez également utiliser DIE sur les colonnes et les contraintes.
Par exemple, vous pouvez utiliser DROP COLUMN IF EXISTS
dans votre ALTER TABLE
déclaration.
Voici un exemple.
DROP TABLE IF EXISTS DieTest; GO CREATE TABLE DieTest ( DieTestId uniqueidentifier NOT NULL DEFAULT NEWID(), DieTestName varchar(70), InsertDate datetime2(7) NOT NULL DEFAULT GETDATE() ); GO ALTER TABLE DieTest DROP COLUMN IF EXISTS DieTestName; GO ALTER TABLE DieTest DROP COLUMN IF EXISTS DieTestName; GO
Résultat :
Started executing query at Line 1 Commands completed successfully. Started executing query at Line 3 Commands completed successfully. Started executing query at Line 11 Commands completed successfully. Started executing query at Line 15 Commands completed successfully.
Exemple 5 – Avant SQL Server 2016
Avant SQL Server 2016, pour tester l'existence d'un objet, vous deviez faire quelque chose comme ceci :
IF DB_ID('Homer') IS NOT NULL DROP DATABASE Homer;
Cet exemple utilise DB_ID()
car nous avons affaire à une base de données. Si l'objet était d'un type différent, vous devrez peut-être utiliser le OBJECT_ID()
fonction ou quelque chose d'autre.
Par exemple :
IF OBJECT_ID('dbo.Customers, 'U') IS NOT NULL DROP TABLE dbo.Customers; IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'MyTrigger') DROP TRIGGER MyTrigger
Une fois que nous commençons à regarder ce code, nous pouvons voir pourquoi DROP IF EXISTS
est un ajout bienvenu à la syntaxe T-SQL.
Objets éligibles
DIE peut être utilisé sur les objets suivants.
AGRÉGÉ | |
ASSEMBLAGE | |
VOIR | |
BASE DE DONNEES | |
DÉFAUT | |
FONCTION | |
INDEX |
Comme mentionné, DIE peut également être utilisé sur les colonnes et les contraintes lors de l'utilisation de ALTER TABLE
déclaration :
- ALTER TABLE DROP COLUMN SI EXISTS
- ALTER TABLE DROP CONSTRAINT SI EXISTS