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.