Wie verwende ich DROP IF EXISTS in SQL Server?

Dieser Artikel beschreibt die “TROPFEN, WENN EXISTIERT” Anweisung verfügbar in SQL Server 2016 und späteren Versionen. “WENN EXITS” ist die neueste optionale Klausel, die in der vorhandenen DROP-Anweisung in SQL Server 2016 und späteren Versionen hinzugefügt wurde. Im Wesentlichen die “TROPFEN, WENN EXISTIERT” Die Option wird verwendet, wenn überprüft werden muss, ob eine Entität in einer Datenbank verbleibt, bevor sie erstellt oder gelöscht wird. In diesem Fall löschen wir zuerst das vorhandene Datenbankobjekt und erstellen es bei Bedarf mit Änderungen neu.

Somit wird verhindert, dass die alte Schreibweise der if-Bedingung und innerhalb der if-Bedingung eine Anweisung geschrieben wird, um die Anwesenheit des Objekts zu testen und es zu löschen. Wenn dies nicht der Fall ist, wird die nächste Anweisung im Stapel weiterhin ausgeführt. Wenn wir jedoch versuchen, ein nicht vorhandenes Objekt zu löschen, wird eine Fehlermeldung angezeigt, wie unten gezeigt.

Führen Sie die folgende Abfrage aus.

drop table dbo.company

Die Ausgabe wird so sein.

Der Fehler tritt beim Löschen des nicht vorhandenen Datenbankobjekts auf

Syntax

“DROP object_type [ IF EXISTS ] object_name”

Argumente

OBJEKTTYP:

Der Objekttyp kann ein beliebiger Objekt aus der Datenbank, dem Trigger, der Assembly, der Sequenz, dem Index, der Tabelle, der Prozeduransicht, der Funktion usw. sein.

WENN EXISTIERT:

Es handelt sich um eine optionale Klausel. Wenn sie in der DROP-Anweisung erwähnt wird, überprüft sie die Existenz des Objekts. Wenn sie vorhanden ist, wird sie gelöscht. Andernfalls wird die nächste Anweisung im Block ohne Fehler weiter ausgeführt.

Mit der Einführung der neuen Methode „DROP IF EXISTS“ in SQL Server 2016 können Entwickler nun kurzen Code schreiben.

Erstellen Sie zunächst eine Datenbank mit dem Namen “appuals”.

Datenbank erstellen

Jetzt erstellen wir eine Tabelle, die durch Ausführen des folgenden Codes gelöscht werden soll.

use [appuals]
Go
CREATE TABLE temp
(
    id INT,
    name varchar(100)
);
GO

Die Ausgabe wird wie folgt sein.

Tabellenerstellung

Erstellen Sie außerdem eine Speicherprozedur, die mit dem folgenden Code gelöscht werden soll.

USE [appuals]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create PROCEDURE [dbo].[sp_temp]
AS
BEGIN
       SET NOCOUNT ON;
       SELECT * from dbo.temp;
END

Die Ausgabe erfolgt wie folgt.

Prozedur erstellen

Alte Methode: Bevor SQL Server drop verwendet, wenn Datenbankobjekte beendet werden

Für die Verwendung der DROP IF EXISTS-Methode vor SQL Server 2016 musste langwieriger IF-Anweisungs-Wrapper-Code geschrieben werden.

Tabelle löschen, falls vorhanden

Das vorherige Verfahren zum Löschen einer Tabelle ist wie folgt.

Wenn Sie SQL Server 2015 oder früher verwenden, müssen Sie den folgenden Code ausführen.

If(OBJECT_ID('dbo.temp') Is Not Null)
Drop Table temp

Die Ausgabe wird wie folgt sein.

Den Tisch fallen lassen

Jetzt ist die Syntax ziemlich verwirrend. Wenn Sie sie nicht mögen und SQL Server 2016 oder höher verwenden, können Sie anstelle großer Wrapper eine einfache DROP IF EXIST-Anweisung verwenden.

Drop-Store-Prozedur, falls vorhanden:

Um die Prozedur zu löschen, müssen wir eine bedingte Anweisung schreiben, um zu überprüfen, ob die Speicherprozedur vorhanden ist oder nicht, und dann die drop-Anweisung schreiben. Andernfalls wird ein Fehler ausgegeben, falls die gespeicherte Prozedur nicht vorhanden ist.

Führen Sie nun die folgenden Anweisungen aus, um die Prozedur in Versionen zu löschen, die niedriger als SQL Server 2016 sind.

IF EXISTS(SELECT 1 FROM sys.procedures WHERE Name="sp_temp")
DROP PROCEDURE dbo.sp_temp

Die Ausgabe wird so sein.

Löschen Sie die Prozedur mit der alten Methode des if-Wrapper-Codes

Datenbank löschen, falls vorhanden:

Wenn Sie frühere Versionen von SQL Server verwenden, müssen Sie den folgenden Code ausführen, um die Datenbank zu löschen.

IF DB_ID('appuals') IS NOT NULL
BEGIN
DROP DATABASE appuals
END

Die Ausgabe wird wie folgt sein.

Löschen Sie die Datenbank mit einer alten Methode

Neue Methode: DROP IF EXISTS wird in SQL Server 2016 und höher unterstützt

Um ein Datenbankobjekt in SQL Server 2016 und höher zu löschen, müssen Sie eine einfache Anweisung ausführen.

Tabelle löschen, falls vorhanden:

Wir können in SQL Server 2016 eine Anweisung wie folgt schreiben, um eine gespeicherte Tabelle zu entfernen, falls vorhanden.

DROP TABLE IF EXISTS dbo.temp

Die Ausgabe wird so sein.

Löschen Sie die Tabelle mit der neuen Methode

Löschverfahren, falls vorhanden:

Jetzt löschen wir die gespeicherte Prozedur, die wir zu Beginn des Artikels erstellt haben, indem wir den folgenden Code ausführen.

DROP PROCEDURE IF EXISTS dbo.sp_temp

Die Ausgabe erfolgt wie folgt.

Löschen Sie die Tabelle mit der neuen Methode

In Bezug auf die Syntax ist diese einfache Aussage leicht zu verstehen und leicht zu merken. Ebenso können wir das gleiche Verfahren anwenden, um andere Datenbankobjekte zu löschen.

Datenbank löschen, falls vorhanden:

Führen Sie den folgenden Code aus, wenn Sie die Datenbank löschen möchten, indem Sie die Prüfung “Wenn vorhanden” verwenden

USE MASTER
GO
DROP DATABASE IF EXISTS appuals

Die Ausgabe erfolgt wie folgt.

Löschen Sie die Datenbank mit der neuen Methode

Der Vorteil dieser Methode besteht darin, dass die nächste Anweisung im Stapel weiterhin ausgeführt wird, wenn die Datenbank nicht vorhanden ist und keinen Fehler verursacht. Versuchen wir, die bereits gelöschte Datenbank erneut zu löschen.

Der Fehler tritt auf, wenn die bereits gelöschte Datenbank erneut gelöscht wird.

Ebenso können wir Indizes, Ansichten, Sequenzen, Assemblys usw. aus der Datenbank löschen.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *