Existenz von SQL Objekten überprüfen

Um stabile Release-Skripte schreiben zu können, ist es sinnvoll vor dem Anlegen von Objekten zum Beispiel zu prüfen um dieses nicht aus einem früheren Release-Lauf noch vorhanden ist. Denn in dem Fall würde ein CREATE natürlich fehlschlagen. Wir haben in diesem Artikel verschiedene Check-Skripte für unterschiedliche Datenbank-Objekt-Typen zusammengetragen.

Funktion

Das nachfolgende Snippet löscht eine Funktion, falls sie besteht:

IF EXISTS (SELECT * 
           FROM sys.objects 
           WHERE object_id = OBJECT_ID(N'[dbo].[fYourFunction]') 
             AND type IN ( N'FN', N'IF', N'TF', N'FS', N'FT' ))
BEGIN
     DROP FUNCTION [dbo].[fYourFunction]
END
GO

Tabelle

Das nachfolgende Snippet löscht eine Tabelle, falls sie besteht:

IF EXISTS (SELECT * 
           FROM sysobjects 
           WHERE object_id = OBJECT_ID(N'dbo.tYourTable') 
             AND xtype='U')
BEGIN
    DROP TABLE dbo.tYourTable
END
GO

Feld

Mit dem nachfolgenden Code wird eine Spalte vom Typ Varchar(1) zu einer Tabelle hinzugefügt, falls sie dort noch nicht existiert.

IF NOT EXISTS(SELECT 1 FROM sys.columns
                       WHERE Name = N'DeinFeld'
                         AND Object_ID = Object_ID(N'dbo.DeineTabelle'))
       ALTER TABLE dbo.DeineTabelle ADD DeinFeld VARCHAR(1) NULL
GO

Im Idealfall kombininiert man dieses Skript natürlich noch mit einem vorgelagertem Check, ob die Tabelle selbst existiert.

Stored Procedure

Das nachfolgende Snippet löscht eine gespeicherte Prozudure, falls sie besteht:

IF EXISTS (SELECT * 
           FROM sys.objects 
           WHERE type = 'P' 
             AND name = 'spYourProcedure')
BEGIN
    DROP PROCEDURE [YourSchema].[spYourProcedure]
END
GO

View

Das nachfolgende Snippet löscht eine View, falls sie besteht:

IF EXISTS(SELECT * 
          FROM sys.views 
          WHERE name = 'vYourView')
BEGIN
    DROP VIEW [YourSchema].[vYourView]
END
GO

 

 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.