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

4 způsoby, jak zkontrolovat, zda tabulka existuje před jejím umístěním na SQL Server (T-SQL)

Vypuštění tabulky v SQL je snadné. Jednoduše použijete DROP TABLE myTable kde myTable je název tabulky, kterou chcete odstranit. Tuto metodu můžete použít k vypuštění tabulky na SQL Server pomocí skriptu T-SQL.

Ale pokud tabulka ve skutečnosti neexistuje, dostanete chybu. Tedy pokud nejprve nezkontrolujete existenci tabulky.

Níže jsou uvedeny čtyři způsoby použití T-SQL ke kontrole, zda tabulka existuje, než ji zrušíte.

Možnost 1:IF EXISTS Ustanovení

Pokud používáte SQL Server 2016 nebo novější, můžeme použít IF EXISTS klauzule DROP TABLE příkaz ke kontrole existence tabulky, než se ji pokusíme zrušit:

DROP TABLE IF EXISTS t1;

Tím se odstraní tabulka nazvaná t1 pokud existuje.

Zde je výsledek spuštění výše uvedeného příkazu, když tabulka existuje (a proto je zrušena):

Commands completed successfully.

A zde je to, co dostaneme, pokud příkaz okamžitě spustíme znovu (tj. když tabulka neexistuje):

Commands completed successfully.

Stejný výstup. Příkaz tedy běží úspěšně bez ohledu na to, zda tabulka existuje nebo ne.

Zde je to, co se stane, když se pokusíme zrušit tabulku bez použití IF EXISTS klauzule:

DROP TABLE t1;

Výsledek:

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

Možnost 2:Zkontrolujte ID objektu

Alternativně můžeme použít OBJECT_ID() funkce pro kontrolu existence tabulky, než se ji pokusíme zahodit:

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

Výše uvedený příklad kontroluje ID objektu pro dbo.t1 stůl. 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 existuje, nevrátí hodnotu NULL, a proto můžeme tabulku zrušit. Pokud objekt není existovat, nebo pokud k ní nemáte přístup, funkce vrátí hodnotu NULL a DROP TABLE příkaz se nespustí.

Možnost 3:Dotaz information_schema.tables

Dalším způsobem, jak zkontrolovat, zda tabulka již existuje, je dotaz na information_schema.tables zobrazit:

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

To dělá podobnou věc jako předchozí příklad; zkontroluje existenci tabulky a vytvoří ji pouze v případě, že neexistuje.

Možnost 4:Dotaz sys.tables

Můžeme se také dotazovat na sys.tables zobrazení katalogu systému:

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 poskytuje mnoho dalších způsobů, jak zkontrolovat existenci tabulek. Příklady viz 6 způsobů, jak zkontrolovat, zda existuje tabulka na serveru SQL.


  1. problém ORA-00001:Porušení jedinečného omezení přichází v INSERT/UPDATE

  2. Vytvořte databázový diagram v MySQL Workbench

  3. Spusťte dávkový soubor pomocí příkazu psql bez hesla

  4. Nejlepší způsob, jak získat počet výsledků před použitím LIMIT