Pokud se v SQL Server pokusíte zrušit objekt, který neexistuje, zobrazí se chyba. Pokud nechcete, aby se objevila chyba, budete muset přidat nějaký další kód, abyste zkontrolovali existenci objektu.
Před SQL Serverem 2016 bylo potřeba přidat IF
příkaz, který se dotazoval na příslušné systémové objekty, aby zjistil, zda daný objekt existuje či nikoli.
Od SQL Server 2016 můžete nyní použít novou, čistší metodu ke kontrole, zda objekt existuje. Budeme to nazývat DROP IF EXISTS
(jinak známé jako „DIE“).
Příklad 1 – Základní syntaxe
Syntaxe ve skutečnosti neobsahuje DROP IF EXISTS
řetězec tak, jak je. Co musíte udělat, je vložit typ objektu mezi DROP
a IF
.
DROP TABLE IF EXISTS Customers
V tomto případě vypouštím tabulku, takže slovo TABLE
je vložen mezi DROP
a IF
. Název tabulky, kterou chci zrušit (v tomto případě Zákazníci ) je umístěn na konci.
Příklad 2 – Základní ukázka
Zde je příklad vytvoření databáze, její odstranění a následného pokusu o její opětovné upuštění.
CREATE DATABASE Homer; GO DROP DATABASE IF EXISTS Homer; GO DROP DATABASE IF EXISTS Homer; GO
Výsledek:
Started executing query at Line 17 Commands completed successfully. Started executing query at Line 19 Commands completed successfully. Started executing query at Line 21 Commands completed successfully.
Nedochází k žádným chybám, i když se pokouším vypustit neexistující objekt na třetí řádek.
Příklad 3 – Bez IF EXISTS
Tady je to znovu, až na to, že tentokrát odstraním IF EXISTS
část.
CREATE DATABASE Homer; GO DROP DATABASE Homer; GO DROP DATABASE Homer; GO
Výsledek:
Started executing query at Line 17 Commands completed successfully. Started executing query at Line 19 Commands completed successfully. Started executing query at Line 21 Msg 3701, Level 11, State 1, Line 5 Cannot drop the database 'Homer', because it does not exist or you do not have permission.
V tomto případě dostanu chybu, protože se pokouší vypustit objekt, který neexistuje.
Příklad 4 – Sloupce a omezení
Můžete také použít DIE na sloupcích a omezeních.
Můžete například použít DROP COLUMN IF EXISTS
ve vaší ALTER TABLE
prohlášení.
Zde je příklad.
DROP TABLE IF EXISTS DieTest; GO CREATE TABLE DieTest ( DieTestId uniqueidentifier NOT NULL DEFAULT NEWID(), DieTestName varchar(70), InsertDate datetime2(7) NOT NULL DEFAULT GETDATE() ); GO ALTER TABLE DieTest DROP COLUMN IF EXISTS DieTestName; GO ALTER TABLE DieTest DROP COLUMN IF EXISTS DieTestName; GO
Výsledek:
Started executing query at Line 1 Commands completed successfully. Started executing query at Line 3 Commands completed successfully. Started executing query at Line 11 Commands completed successfully. Started executing query at Line 15 Commands completed successfully.
Příklad 5 – Před verzí SQL Server 2016
Před SQL Serverem 2016 byste k testování existence objektu museli udělat něco takového:
IF DB_ID('Homer') IS NOT NULL DROP DATABASE Homer;
Tento příklad používá DB_ID()
protože máme co do činění s databází. Pokud byl objekt jiného typu, možná budete muset použít OBJECT_ID()
funkce nebo něco úplně jiného.
Například:
IF OBJECT_ID('dbo.Customers, 'U') IS NOT NULL DROP TABLE dbo.Customers; IF EXISTS (SELECT * FROM sys.triggers WHERE name = 'MyTrigger') DROP TRIGGER MyTrigger
Jakmile se podíváme na tento kód, uvidíme, proč DROP IF EXISTS
je vítaným doplňkem syntaxe T-SQL.
Vhodné objekty
DIE lze použít na následující objekty.
AGREGOVAT | POSTUP | TABULKA |
MONTÁŽ | ROLE | SPUŠTĚČ |
ZOBRAZIT | PRAVIDLO | TYP |
DATABÁZE | SCHÉMA | UŽIVATEL |
VÝCHOZÍ | BEZPEČNOSTNÍ ZÁSADY | ZOBRAZIT |
FUNKCE | SEKVENCE | |
INDEX | SYNONYM |
Jak již bylo zmíněno, DIE lze použít také na sloupce a vazby při použití ALTER TABLE
prohlášení:
- ZMĚŇTE SLOUPEK TABULKY, POKUD EXISTUJE
- POKUD EXISTUJE ZMĚŇTE OMEZENÍ POHLEDU TABULKY