SQL Server’da DROP TABLE IF EXISTS Örnekleri

SQL Server'da DROP TABLE IF EXISTS Örnekleri
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.

  1. Tablonun şeması üzerinde ALTER izni
  2. Tablo üzerinde izin
  3. 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.

381 Kez Okundu

Yavuz Selim Kart

Yazılım ve veri tabanında bildiklerimi anlatmaya gayret ediyorum. Halen birçok programlama dili üzerinde araştırmalar yaparak kendimi geliştiriyorum. Bunlar haricinde Grafik Tasarım ve Wordpress konularına da ilgim bulunmakta. SEO ve Sosyal medya yönetimleri hakkında da bilgim mevcuttur. Kısaca çok çalışmayı seven azimli biriyim.

You may also like...

Yazı kopyalamak yasaktır!