SQL Server

DROP…IF EXISTS

Nová syntaxe DROP … IF EXISTS je jednou z nejpraktičtějších novinek v SQL Serveru 2016 a při praktickém vývoji i přípravě deployment skriptů nám může ušetřit spoustu starostí a práce navíc. DROP… IF EXISTS lze použít tehdy, pokud chceme odstranit některý z podporovaných databázových objektů, ale nejsme si jisti, zda objekt v danou chvíli existuje nebo se prostě jen chceme vyhnout situaci, že by z jakéhokoliv důvodu mohla být vygenerována výjimka.

Syntaxe je v porovnání s dosud používanými způsoby opravdu jednoduchá:

-- Before SQL 2016
IF EXISTS (SELECT * FROM sys.[tables] WHERE [name] = 'SampleTable')
	DROP TABLE [dbo].[SampleTable]
GO

-- SQL 2016
DROP TABLE IF EXISTS dbo.[SampleTable]
GO

Tabulka dbo.SampleTable v databázi neexistuje s pokud bychom vykonali DROP TABLE [dbo].[SampleTable], došlo by k výjimce:

drop_table_exception
Proto jsme ve stávajícím kódu vždy museli vždy předem zjišťovat, zda daný objekt existuje, a to ještě pro každý objekt různým dotazem, a bylo jednoduché udělat chybu.

S klauzulí DROP…IF EXISTS nám všechny tyto starosti odpadají.

DROP…IF EXISTS je podporováno pro tyto databázové objekty:

  • ASSEMBLY
  • VIEW
  • DATABASE
  • DEFAULT
  • FUNCTION
  • PROCEDURE
  • INDEX
  • AGGREGATE
  • ROLE
  • RULE
  • SCHEMA
  • SECURITY POLICY
  • SEQUENCE
  • SYNONYM
  • TABLE
  • TRIGGER
  • TYPE
  • USER
  • VIEW

Kromě toho můžeme novou syntaxi využít i při manipulaci se sloupci pomocí příkazu ALTER TABLE:

-- Column
ALTER TABLE [dbo].[SampleTable] DROP COLUMN IF EXISTS [SampleColumn]
GO

-- Constraint
ALTER TABLE [dbo].[SampleTable] DROP CONSTRAINT IF EXISTS [SampleConstraint]
GO

Leave a Reply

Your email address will not be published. Required fields are marked *