Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erstellen Sie ein Objekt DIE in SQL Server

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