SQL Server 2016 – Drop if Exists

Większość z nas spotkała się z przypadkiem gdy chcemy na nowo stworzyć obiekt bez względu na to czy takowy obiekt istnieje czy też nie. Do tej pory musieliśmy radzić sobie używając IF EXISTS – na szczęście w SQL Server 2016 mamy do dyspozycji nową składnię – zapraszam do kolejnego artykułu w którym poznajemy funkcjonalności naszego ulubionego systemu bazodanowego.

Zapewne większość z was ma ulubiony/wybrany sposób na usuwanie obiektów jeżeli takowe istnieją – jednym z nich jest wykorzystanie wspomnianego IF EXISTS tak jak zostało to przedstawione poniżej.

Na samym początku stwórzmy sobie w ramach bazy tempdb tabelę o nazwie dbo.TEST

USE tempdb
GO

CREATE TABLE TEST
(id INT)
GO

IF EXISTS wykorzystuje widok systemowy sys.tables aby sprawdzić czy obiekt istnieje czy też nie:

IF EXISTS(SELECT * FROM sys.tables where object_id=OBJECT_ID('dbo.TEST'))
BEGIN
DROP TABLE dbo.TEST
END

Proste prawda? Jednak jest to kilka dodatkowych linijek kodu, które mogły z czasem nieco nam zbrzydnąć i z zazdrością patrzyliśmy na użytkowników innych systemów bazodanowych, którzy posiadali składnię CREATE OR REPLACE. Oczywiście istnieje szereg innych metod (oprócz przedstawionej powyżej), które pozwolą nam osiągnąć pożądany efekt – przedstawmy jeszcze jeden z nich z wykorzystaniem funkcji OBJECT_ID()

IF OBJECT_ID('dbo.TEST') IS NOT NULL
BEGIN
DROP TABLE dbo.TEST
END

Jest to skrócona forma pierwszej metody, jednakże od SQL Server 2016 istnieje jeszcze prostsza metoda, która  wykorzystuje składnię DROP IF EXTSTS:

DROP TABLE IF EXISTS dbo.TEST

Bardzo prosty i kompaktowy kod, jednakże mimo wszystko uważam, że CREATE OR REPLACE byłby również dobrym rozwiązaniem pozwalającym zaoszczędzić jeszcze więcej linijek kodu. Mimo to myślę, że tę zmianę możemy zaliczyć na plus  – gdyż mimo wszystko będzie dla mnie użyteczna i będę jej namiętnym użytkownikiem.

Składnia ta działa dla większości obiektów tj:

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

Mam nadzieję, że nowy sposób usuwania istniejących obiektów przypadnie Wam do gustu. Ze względu na fakt, iż niektóre nowości zaimplementowane w SQL Server 2016 są bardzo proste i wytłumaczenie ich nie zajmuje dużo miejsca (tak jak w tym przypadku) będę je dzielił na osobne małe artykuły – dzięki temu ich wyszukanie będzie dużo prostsze, niż agregacja wszystkich nowości i funkcji TSQL w ramach jednego artykułu.

Leave a Reply