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

4 Möglichkeiten, um zu prüfen, ob eine Tabelle existiert, bevor sie in SQL Server gelöscht wird (T-SQL)

Einfaches Löschen einer Tabelle in SQL. Sie verwenden einfach DROP TABLE myTable wobei myTable ist der Name der Tabelle, die Sie löschen möchten. Sie können diese Methode verwenden, um eine Tabelle in SQL Server über ein T-SQL-Skript zu löschen.

Aber Sie erhalten eine Fehlermeldung, wenn die Tabelle nicht wirklich existiert. Das heißt, es sei denn, Sie prüfen zuerst, ob die Tabelle existiert.

Nachfolgend finden Sie vier Möglichkeiten, T-SQL zu verwenden, um zu prüfen, ob die Tabelle existiert, bevor Sie sie löschen.

Option 1:Der IF EXISTS Klausel

Bei Verwendung von SQL Server 2016 oder höher können wir den IF EXISTS verwenden -Klausel der DROP TABLE -Anweisung, um die Existenz der Tabelle zu überprüfen, bevor wir versuchen, sie zu löschen:

DROP TABLE IF EXISTS t1;

Dies löscht eine Tabelle namens t1 falls vorhanden.

Hier ist das Ergebnis der Ausführung der obigen Anweisung, wenn die Tabelle existiert (und daher gelöscht wird):

Commands completed successfully.

Und hier ist, was wir bekommen, wenn wir die Anweisung sofort erneut ausführen (d. h. wenn die Tabelle nicht existiert):

Commands completed successfully.

Gleiche Ausgabe. Die Anweisung wird also erfolgreich ausgeführt, unabhängig davon, ob die Tabelle existiert oder nicht.

Folgendes passiert, wenn wir versuchen, die Tabelle zu löschen, ohne den IF EXISTS zu verwenden Klausel:

DROP TABLE t1;

Ergebnis:

Msg 3701, Level 11, State 5, Line 1
Cannot drop the table 't1', because it does not exist or you do not have permission.

Option 2:Überprüfen Sie die Objekt-ID

Wir können alternativ die OBJECT_ID() verwenden Funktion, um die Existenz der Tabelle zu überprüfen, bevor wir versuchen, sie zu löschen:

IF OBJECT_ID(N'dbo.t1', N'U') IS NOT NULL
DROP TABLE dbo.t1;
GO

Das obige Beispiel prüft die Objekt-ID auf dbo.t1 Tisch. Das zweite Argument für OBJECT_ID() gibt den Objekttyp an, nach dem wir suchen. In diesem Fall verwenden wir U , was für „benutzerdefinierte Tabelle“ steht.

Die OBJECT_ID() gibt die Datenbankobjekt-Identifikationsnummer eines schemabezogenen Objekts zurück. Wenn das Objekt existiert, gibt es nicht NULL zurück, und deshalb können wir die Tabelle löschen. Wenn das Objekt nicht existieren, oder wenn Sie keinen Zugriff darauf haben, gibt die Funktion NULL und die DROP TABLE zurück Anweisung wird nicht ausgeführt.

Option 3:information_schema.tables abfragen

Eine andere Möglichkeit zu prüfen, ob eine Tabelle bereits existiert, ist die Abfrage der information_schema.tables Ansicht:

IF EXISTS (
    SELECT * FROM information_schema.tables
    WHERE table_schema = 'dbo' AND table_name = 't1') 	
    DROP TABLE dbo.t1;

Das macht etwas Ähnliches wie im vorherigen Beispiel; Es prüft die Existenz der Tabelle und erstellt sie nur, wenn sie nicht existiert.

Option 4:sys.tables abfragen

Wir können auch die sys.tables abfragen Systemkatalogansicht:

IF EXISTS (
    SELECT * FROM sys.tables t 
    JOIN sys.schemas s ON (t.schema_id = s.schema_id) 
    WHERE s.name = 'dbo' AND t.name = 't1') 	
    DROP TABLE dbo.t1;

SQL Server bietet viele andere Möglichkeiten, um das Vorhandensein von Tabellen zu überprüfen. Beispiele finden Sie unter 6 Wege, um zu überprüfen, ob eine Tabelle in SQL Server existiert.