SQL Server’da DROP TABLE IF EXISTS Örnekleri
Herkese merhaba. Bu yazıda SQL Server’da DROP TABLE IF EXISTS örnekleri ile ilgili bilgi vereceğim.
SQL Server’da veritabanı üzerinde aynı ada sahip bir tablonun mevcut olup olmadığını kontrol etmeniz gereken durumlar olabilir, aksi durumda CREATE TABLE yapmaya çalışırsanız işlem başarısızlıkla sonuçlanır. DROP TABLE yapmaya çalışırsanız ve tablo mevcut değilse de, “Msg 3701 Level 11 State 5, 25 Cannot drop the table because it does not exist or you do not have permission” hatası alırsınız. Peki bu gibi sorunları nasıl çözeceğiz.
Çözüm oldukça basit. Tabloyu DROP etmeden önce tablonun var olup olmadığını kontrol etmek için T-SQL’inize koşullu mantık eklemektir. Eğer varsa, tabloyu DROP edebilirsiniz, eğer yoksa DROP TABLE’ı atlayabilirsiniz.
Bu eğitimde, var olmayan bir tabloyu düşürmeye çalıştığımızda ne gördüğümüzün bir örneğine ve DROP TABLE’ı koşullu olarak çalıştırmanın aşağıdaki yollarına bakacağız:
OBJECT_ID() fonksiyonu kullanarak (SQL Server’ın tüm versiyonlarında destekleniyor.)
sys.tables View’ı kullanarak sorgulama (SQL Server’ın tüm versiyonlarında destekleniyor.)
INFORMATION_SCHEMA.TABLES View’ı kullanarak ile sorgulama (SQL Server’ın tüm versiyonlarında destekleniyor.)
IF EXISTS ile DROP TABLE (SQL Server 2016 ve üzeri versiyonlarda destekleniyor.)
DROP TABLE ifadesini kullanmak için kullanıcının aşağıdakilerden birine sahip olmasını gerektirir.
- Tablonun şeması üzerinde ALTER izni
- Tablo üzerinde izin
- db_ddladmin rolü iznine sahip bir kullanıcı
Örnekleri anlatmak için OrnekVeritabani adında yeni bir veritabanı oluşturalım.
USE OrnekVeritabani;
GO
DROP TABLE dbo.Tablomuz;
GO
DROP TABLE yazıp çalıştırınca ve ‘Msg 3701, Level 11, State 5, Line 5 Cannot drop the table ‘dbo.Tablomuz’, because it does not exist or you do not have permission.’ mesajıyla başarısız olacaktır çünkü olmayan bir nesneyi DROP etmeye çalışmaktadır.
1-) OBJECT_ID() Fonksiyonunu Kullanılarak DROP TABLE
OBJECT_ID() fonksiyonu, kendisine aktarılan ad ve tür mevcutsa o türe ait bir nesne döndürür.
Aşağıdaki örnekte, fonksiyona tablonun adını ve nesnenin türünü (U = kullanıcı tablosu) gönderiyoruz ve tabloya ait bir kayıt bulunamazsa NULL değer döndürülüyor ve DROP TABLE işlemi yok sayılıyor.
USE OrnekVeritabani;
GO
IF OBJECT_ID(N'dbo.Tablomuz', N'U') IS NOT NULL
DROP TABLE [dbo].[Tablomuz];
GO
2-) sys.tables Sistem View’ını Sorgulayarak DROP TABLE
Bir tablonun var olup olmadığını görmenin başka bir yolu, tablo ve şema adları için bir giriş olup olmadığını görmek için sys.tables Sistem View’ını sorgulamaktır.
USE OrnekVeritabani;
GO
IF EXISTS (SELECT
*
FROM sys.tables
WHERE SCHEMA_NAME(schema_id) LIKE 'dbo'
AND name LIKE 'Tablomuz')
DROP TABLE dbo.Tablomuz;
GO
DROP TABLE, EXISTS sys.systables’den döndürülen satır olmadığı için çalışmaz.
3-) INFORMATION_SCHEMA.TABLES View’ını Sorgulayarak DROP TABLE
Tablonun var olup olmadığını görmek için ISO uyumlu INFORMATION_SCHEMA.TABLES View’ını da sorgulayabiliriz.
USE OrnekVeritabani;
GO
IF EXISTS (SELECT
*
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'Tablomuz'
AND TABLE_SCHEMA = 'dbo')
DROP TABLE dbo.Tablomuz;
GO
DROP TABLE, döndürülen kayıt olmadığı için yok sayılır.
4-) DROP TABLE IF EXISTS
Önceki T-SQL örnekleri, desteklenen tüm SQL Server sürümlerinde çalışacaktır. DROP IF EXISTS sadece SQL Server 2016 ve üzeri versiyonlarda çalışır.
DROP TABLE IF EXISTS kontrol etme ve DROP etme işlemlerinin her ikisini tek bir satırda yapar.
USE OrnekVeritabani;
GO
DROP TABLE IF EXISTS dbo.Tablomuz;
GO
Yukarıda DROP TABLE IF EXISTS işleminin kaç şekilde yapılabildiğini gördünüz. Sizler de kendi tablolarınızı kaldırırken yukarıdaki yöntemlerden birini kullanabilirsiniz.
Linkteki kaynağı da okuyabilirsiniz : https://database.guide/4-ways-to-check-if-a-table-exists-before-dropping-it-in-sql-server-t-sql/
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.