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.
- Avoiding Issues: Monitoring Query Pushdowns in Databricks Federated Queries - October 27, 2024
- Microsoft Fabric: Using Workspace Identity for Authentication - September 25, 2024
- Executing SQL queries from Azure DevOps using Service Connection credentials - August 28, 2024
Last comments