DROP ... IF EXISTS

Ab SQL Server 2016 gibt es einige schöne Möglichkeiten Skripte etwas fehlertoleranter zu schreiben.

Sowohl bei der Entfernung von Spalten, als auch bei der Löschung von Tabellen können wir jetzt angeben, dass diese Aktion nur durchgeführt werden soll, wenn das Ziel-Objekt auch existiert!

Als erstes legen wir uns mal eine Tabelle an, die zu Anfang drei Spalten haben soll. Ein Select auf die leere Tabelle zeigt uns schon mal die vorhandenen Spalten.

USE tempdb
GO
-- Ab SQL Server 2016
CREATE TABLE dbo.TestDrop (Col1 INT, Col2 INT, Col3 INT);
GO

SELECT *
FROM dbo.TestDrop;

col1col2col3

Jetzt möchten wir gerne wieder einige Spalten entfernen. Die Spalte col2 soll auf jeden Fall vorhanden sein, damit dieses Statement funktioniert. Die beiden anderen Spalten (Col3, Col4) werden auch gedropped, aber nur wenn sie vorhanden sind. Falls sie nicht vorhanden sind, gibt es auch keinen Fehler. Ein Select auf die leere Tabelle zeigt uns dann die jetzt noch vorhandenen Spalten.

-- Wir droppen ein paar Spalten. Nicht alle gibt es wirklich!
ALTER TABLE dbo.TestDrop DROP COLUMN Col2, COLUMN IF EXISTS Col3, COLUMN IF EXISTS Col4;

SELECT *
FROM dbo.TestDrop;

col1

Ganz am Ende räumen wir wieder auf und löschen die Tabelle, aber nur wenn sie vorhanden ist!

-- Auch hier kann man ein IF EXISTS verwenden um Fehler abzufangen
DROP TABLE IF EXISTS dbo.TestDrop;

Wie man sieht ist es gar nicht so schwer einzelne oder mehrere Spalten aus einer Tabelle zu entfernen, ganz egal, ob sie vorhanden sind oder nicht!