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 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
Rolle
Das nachfolgende Snippet erstellt eine Datenbank-Rolle, falls sie noch nicht existiert:
IF NOT EXISTS (SELECT * FROM sys.database_principals WHERE name='NeuerRollenName') BEGIN CREATE ROLE NeuerRollenName AUTHORIZATION dbo END
CREATE ROLE wird dabei mit dem optionalen Parameter AUTHORIZATION aufgerufen um anzugeben, unter welchem User-Konto die Rolle erstellt werden soll.