Wenn Sie in SQL Server versuchen, ein nicht vorhandenes Objekt zu löschen, erhalten Sie eine Fehlermeldung. Wenn Sie keinen Fehler erhalten möchten, müssen Sie zusätzlichen Code hinzufügen, um die Existenz des Objekts zu überprüfen.
Vor SQL Server 2016 mussten Sie ein IF
hinzufügen -Anweisung, die die relevanten Systemobjekte abfragte, um herauszufinden, ob das Objekt existierte oder nicht.
Ab SQL Server 2016 können Sie jetzt eine neue, sauberere Methode verwenden, um zu prüfen, ob ein Objekt vorhanden ist. Wir nennen es DROP IF EXISTS
(auch bekannt als „DIE“).
Beispiel 1 – Grundlegende Syntax
Die Syntax enthält nicht wirklich den DROP IF EXISTS
Saite wie sie ist. Was Sie tun müssen, ist den Objekttyp zwischen DROP
einzufügen und IF
.
DROP TABLE IF EXISTS Customers
In diesem Fall lasse ich eine Tabelle fallen, also das Wort TABLE
wird zwischen DROP
eingefügt und IF
. Der Name der Tabelle, die ich löschen möchte (in diesem Fall Kunden ) wird am Ende platziert.
Beispiel 2 – Einfache Demo
Hier ist ein Beispiel für das Erstellen einer Datenbank, das anschließende Löschen und den erneuten Versuch, sie zu löschen.
CREATE DATABASE Homer; GO DROP DATABASE IF EXISTS Homer; GO DROP DATABASE IF EXISTS Homer; GO
Ergebnis:
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.
Es treten keine Fehler auf, obwohl ich versuche, ein nicht vorhandenes Objekt in der dritten Zeile abzulegen.
Beispiel 3 – Ohne IF EXISTS
Hier ist es wieder, außer dass ich dieses Mal das IF EXISTS
entferne Teil.
CREATE DATABASE Homer; GO DROP DATABASE Homer; GO DROP DATABASE Homer; GO
Ergebnis:
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.
In diesem Fall erhalte ich eine Fehlermeldung, da versucht wird, ein nicht vorhandenes Objekt zu löschen.
Beispiel 4 – Spalten und Einschränkungen
Sie können DIE auch für Spalten und Einschränkungen verwenden.
Beispielsweise können Sie DROP COLUMN IF EXISTS
verwenden innerhalb Ihrer ALTER TABLE
Aussage.
Hier ist ein Beispiel.
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
Ergebnis:
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.
Beispiel 5 – Vor SQL Server 2016
Vor SQL Server 2016 mussten Sie etwa so vorgehen, um die Existenz eines Objekts zu testen:
IF DB_ID('Homer') IS NOT NULL DROP DATABASE Homer;
Dieses Beispiel verwendet DB_ID()
weil wir es mit einer Datenbank zu tun haben. Wenn das Objekt ein anderer Typ war, müssen Sie möglicherweise die OBJECT_ID()
verwenden Funktion oder etwas ganz anderes.
Zum Beispiel:
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
Sobald wir anfangen, uns diesen Code anzusehen, können wir sehen, warum DROP IF EXISTS
ist eine willkommene Ergänzung zur T-SQL-Syntax.
Berechtigte Objekte
DIE kann für die folgenden Objekte verwendet werden.
AGGREGAT | VERFAHREN | TABELLE |
MONTAGE | ROLLE | AUSLÖSEN |
ANSICHT | REGEL | TYP |
DATENBANK | SCHEMA | NUTZER |
STANDARD | SICHERHEITSRICHTLINIE | ANSICHT |
FUNKTION | SEQUENZ | |
INDEX | SYNONYM |
Wie bereits erwähnt, kann DIE auch für Spalten und Einschränkungen verwendet werden, wenn ALTER TABLE
verwendet wird Aussage:
- TABELLEN-DROP-SPALTE ÄNDERN, WENN VORHANDEN
- ÄNDERN SIE DIE TABLE DROP-EINSCHRÄNKUNG, WENN VORHANDEN