Im SQL Server 2016 CTP 3 ist ein neuer SQL Befehl hinzugekommen und zwar DROP IF EXISTS. DROP IF EXISTS behandelt das folgende Problem: Wenn man ein Objekt anlegen möchte das schon existiert wirft der SQL Server berechtigterweise einen Fehler. Im Rahmen der Entwicklung von SQL Server Datenbanken kann es aber vorkommen dass man Objekte häufiger löschen und neu anlegen muss. Wenn es sich bei den Objekten nicht gerad um eine Tabelle handelt, ist das in der Regel auch problemlos möglich. Hat man beispielsweise eine View oder eine Stored Procedure macht man durch das Löschen und neu anlegen der Stored Procedure ja in der Regel nichts kaputt. Hat man ein Script erstellt das die Stored Procedure neu anlegt und möchte, dass dieses Script immer ausgeführt werden kann, unabhängig davon, ob es das Objekt schon gibt oder nicht. In der Regel hat man dies bisher über den folgenden, etwas sperrigen (hervorgehobenen) Code gemacht:
IF OBJECT_ID('dbo.doLogging', 'P') IS NOT NULL DROP PROCEDURE dbo.doLogging; GO CREATE PROCEDURE dbo.doLogging AS SET NOCOUNT ON; BEGIN INSERT INTO dbo.SSISLog (LogText) VALUES ('Logged'); END;
Das ist natürlich ziemlich unschön und ggf. auch etwas schwer zu lesen. In SQL Server 2016 CTP 3 hat Microsoft den neuen Befehl DROP … IF EXISTS eingefügt, der genau dasselbe macht wie oben der IF-Block, aber etwas angenehmer zu lesen ist. Unter CTP 3 würde der obige Code wie folgt aussehen:
DROP PROCEDURE IF EXISTS dbo.doLogging; GO CREATE PROCEDURE dbo.doLogging AS SET NOCOUNT ON; BEGIN INSERT INTO dbo.SSISLog (LogText) VALUES ('Logged'); END;
Das ist sicherlich keine Erweiterung oder Änderung die einen Hype auslösen wird, vereinfacht aber das Schreiben und die Lesbarkeit des Codes etwas, zumal „IF EXISTS“ einfach nur eine Erweiterung des DROP Befehls ist. Verwenden kann man DROP … IF EXISTS für
- AGGREGATE
- ASSEMBLY
- DATABASE
- DEFAULT
- VIEW
- COLUMN
- CONSTRAINT
- PROCEDURE
- ROLE
- RULE
- SCHEMA
- SECURITY
- FUNCTION
- INDEX
- TABLE
- TRIGGER
- TYPE
- USER
- POLICY
- SEQUENCE
- SYNONYM
Dirk Honding (B|T) hat hier einen Artikel geschrieben, der das Thema noch einmal von einer anderen Seite beleuchtet.