Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

2 sposoby na utworzenie tabeli, jeśli nie istnieje w SQL Server

T-SQL nie zawiera IF NOT EXISTS klauzula z jej CREATE TABLE oświadczenie, jak robią to niektóre inne DBMS.

Dlatego, jeśli chcemy sprawdzić istnienie tabeli przed utworzeniem jej w SQL Server, musimy użyć innych metod.

Opcja 1:Sprawdź identyfikator obiektu

W SQL Server możemy użyć OBJECT_ID() funkcja sprawdzająca istnienie tabeli, zanim spróbujemy ją utworzyć:

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

Powyższy przykład sprawdza identyfikator obiektu dla dbo.t1 tabela.

Drugi argument OBJECT_ID() określa typ obiektu, którego szukamy. W tym przypadku używamy U , czyli „tabela zdefiniowana przez użytkownika”.

OBJECT_ID() zwraca numer identyfikacyjny obiektu bazy danych obiektu o zakresie schematu. Jeśli obiekt nie istnieje lub nie masz do niego dostępu, funkcja zwraca NULL. Dlatego możemy sprawdzić wartość NULL i utworzyć tabelę tylko wtedy, gdy ta funkcja zwróci NULL.

Możemy użyć OBJECT_ID() funkcja sprawdzania identyfikatora obiektu tabeli po jego utworzeniu:

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

Przykładowy wynik:

354100302

Gdybyśmy chcieli trochę więcej informacji, moglibyśmy zrobić coś takiego:

sp_tables 't1';

Wynik:

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

Tutaj KrankyKranes to baza danych, w której utworzyłem tabelę.

Istnieje wiele innych sposobów patrzenia na istniejące tabele. Zobacz 6 sposobów sprawdzenia, czy tabela istnieje w SQL Server, aby zapoznać się z przykładami.

Opcja 2:Zapytanie o sys.tables

Innym sposobem sprawdzenia, czy tabela już istnieje, jest zapytanie do sys.tables widok katalogu systemowego.

Przykład:

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)
        );

To działa podobnie do poprzedniego przykładu; sprawdza istnienie tabeli i tworzy ją tylko wtedy, gdy ona nie istnieje.

Niezależnie od metody użytej do sprawdzenia istnienia tabeli, polecenie zakończy się pomyślnie, niezależnie od tego, czy tabela istnieje, czy nie.

Tak więc otrzymujemy następujące dane wyjściowe z obu metod:

Commands completed successfully.

Otrzymuję tę wiadomość, niezależnie od tego, czy tabela już istniała, czy nie.

Jeśli tabela już istnieje, ale nie sprawdzamy jej istnienia, otrzymujemy następujący błąd:

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

Należy zauważyć, że tylko dlatego, że tabela o tej nazwie już istnieje w bazie danych, nie oznacza to, że ma poprawną definicję. Powyższe metody po prostu sprawdzają tabelę według nazwy i schematu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać wartości kolumn tożsamości bez podawania nazwy kolumny tożsamości w Select — samouczek SQL Server/T-SQL, część 46

  2. Ważna zmiana w Extended Events w SQL Server 2012

  3. Użycie SqlParameter w klauzuli SQL LIKE nie działa

  4. Czy MS-SQL AND/OR jest warunkowy (wykonywanie oceny zwarcia)?

  5. Jak sprawdzić zgodność bazy danych SQL Server po przestarzałej funkcji sp_dbcmptlevel?