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

Vytvořte objekt DIE na serveru SQL Server

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

  1. Provádění více příkazů pomocí Postgresql přes SQLAlchemy neuchová změny

  2. Opravit chybovou zprávu 4151 „Typ prvního argumentu pro NULLIF nemůže být konstanta NULL, protože typ prvního argumentu musí být znám“ v SQL Server

  3. MIN a MAX agregační funkce v SQL Server

  4. Jak zálohovat databáze MySQL pomocí AutoMySQLBackup