Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Créer un objet DIE dans SQL Server

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.

PROCÉDURE

TABLE

RÔLE

DÉCLENCHEUR

RÈGLE

TYPE

SCHÉMA

UTILISATEUR

POLITIQUE DE SÉCURITÉ

VOIR

SÉQUENCE

SYNONYME

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