sql >> Databáze >  >> RDS >> Sqlserver

2 způsoby, jak vytvořit tabulku, pokud na serveru SQL neexistuje

T-SQL nezahrnuje IF NOT EXISTS klauzule s její CREATE TABLE jako některé jiné DBMS.

Pokud tedy chceme ověřit existenci tabulky předtím, než ji vytvoříme v SQL Serveru, musíme použít jiné metody.

Možnost 1:Zkontrolujte ID objektu

V SQL Server můžeme použít OBJECT_ID() funkce pro kontrolu existence tabulky, než se ji pokusíme vytvořit:

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

Výše uvedený příklad kontroluje ID objektu pro dbo.t1 tabulka.

Druhý argument pro OBJECT_ID() určuje typ objektu, který hledáme. V tomto případě používáme U , což je pro „uživatelem definovanou tabulku“.

OBJECT_ID() vrátí identifikační číslo databázového objektu objektu v rozsahu schématu. Pokud objekt neexistuje nebo k němu nemáte přístup, funkce vrátí hodnotu NULL. Proto můžeme zkontrolovat hodnotu NULL a vytvořit tabulku pouze v případě, že tato funkce vrátí hodnotu NULL.

Můžeme použít OBJECT_ID() funkce pro kontrolu ID objektu tabulky po jejím vytvoření:

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

Příklad výsledku:

354100302

Pokud bychom chtěli trochu více informací, mohli bychom udělat něco takového:

sp_tables 't1';

Výsledek:

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

Zde KrankyKranes je databáze, ve které jsem vytvořil tabulku.

Existuje mnoho dalších způsobů, jak se podívat na existující tabulky. Příklady viz 6 způsobů, jak zkontrolovat, zda existuje tabulka na serveru SQL.

Možnost 2:Dotaz na sys.tables

Dalším způsobem, jak zkontrolovat, zda tabulka již existuje, je dotaz na sys.tables zobrazení systémového katalogu.

Příklad:

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 dělá podobnou věc jako předchozí příklad; zkontroluje existenci tabulky a vytvoří ji pouze v případě, že neexistuje.

Bez ohledu na metodu použitou ke kontrole existence tabulky se příkaz dokončí úspěšně, bez ohledu na to, zda tabulka existuje nebo ne.

Z obou metod tedy získáme následující výstup:

Commands completed successfully.

Dostávám tuto zprávu, zda tabulka již existovala nebo ne.

Pokud tabulka již existuje, ale nezkontrolujeme existenci tabulky, zobrazí se tato chyba:

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

Je důležité si uvědomit, že to, že tabulka s tímto názvem již v databázi existuje, neznamená, že má správnou definici. Výše uvedené metody jednoduše zkontrolují tabulku podle názvu a schématu.


  1. Přírůstkové zatížení v SSIS

  2. Proč se mi při pokusu o načtení objektu blob do databáze zobrazí chyba java.lang.AbstractMethodError?

  3. Počet Počet po sobě jdoucích výskytů hodnot v tabulce

  4. Jak povolit SSL v PostgreSQL