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

2 Möglichkeiten zum Erstellen einer Tabelle, wenn sie in SQL Server nicht vorhanden ist

T-SQL enthält nicht den IF NOT EXISTS -Klausel mit ihrem CREATE TABLE -Anweisung, wie es einige andere DBMS tun.

Wenn wir also prüfen möchten, ob die Tabelle existiert, bevor wir sie in SQL Server erstellen, müssen wir andere Methoden verwenden.

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

In SQL Server können wir die OBJECT_ID() verwenden Funktion, um die Existenz der Tabelle zu überprüfen, bevor wir versuchen, sie zu erstellen:

IF OBJECT_ID(N'dbo.t1', N'U') IS NULL
CREATE TABLE dbo.t1 (
    c1 int,
    c2 varchar(10)
    );
GO

Das obige Beispiel prüft die Objekt-ID auf dbo.t1 Tabelle.

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 nicht existiert oder Sie keinen Zugriff darauf haben, gibt die Funktion NULL zurück. Daher können wir nach einem NULL-Wert suchen und die Tabelle nur erstellen, wenn diese Funktion NULL zurückgibt.

Wir können die OBJECT_ID() verwenden Funktion, um die Objekt-ID der Tabelle zu überprüfen, sobald sie erstellt wurde:

SELECT OBJECT_ID(N'dbo.t1', N'U');

Beispielergebnis:

354100302

Wenn wir ein bisschen mehr Informationen wollten, könnten wir so etwas tun:

sp_tables 't1';

Ergebnis:

+-------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER   | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------------+---------------+--------------+--------------+-----------|
| KrankyKranes      | dbo           | t1           | TABLE        | NULL      |
+-------------------+---------------+--------------+--------------+-----------+

Hier, KrankyKranes ist die Datenbank, in der ich die Tabelle erstellt habe.

Es gibt viele andere Möglichkeiten, sich vorhandene Tabellen anzusehen. Beispiele finden Sie unter 6 Wege, um zu überprüfen, ob eine Tabelle in SQL Server existiert.

Option 2:sys.tables abfragen

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

Beispiel:

IF NOT 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') 	
    CREATE TABLE dbo.t1 (
        c1 int,
        c2 varchar(10)
        );

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

Unabhängig von der Methode, die zum Überprüfen der Existenz der Tabelle verwendet wird, wird der Befehl erfolgreich abgeschlossen, unabhängig davon, ob die Tabelle vorhanden ist oder nicht.

Wir erhalten also die folgende Ausgabe von beiden Methoden:

Commands completed successfully.

Ich bekomme diese Meldung, ob die Tabelle bereits existierte oder nicht.

Wenn die Tabelle bereits existiert, wir aber nicht prüfen, ob die Tabelle existiert, erhalten wir einen Fehler wie diesen:

Msg 2714, Level 16, State 6, Line 1
There is already an object named 't1' in the database.

Es ist wichtig zu beachten, dass, nur weil eine Tabelle mit diesem Namen bereits in der Datenbank existiert, dies nicht bedeutet, dass sie die richtige Definition hat. Die obigen Methoden suchen einfach anhand des Namens und des Schemas nach der Tabelle.