SQL Server’da Cannot Truncate Table Because It is Being Referenced by a Foreign Key Constraint Hatası

Herkese merhaba,

Bu yazıda sizlere SQL Server’da cannot truncate table because it is being referenced by a foreign key constraint hatasından bahsedeceğim.

SQL Server’da bazı durumlarda cannot truncate table because it is being referenced by a foreign key constraint hatası ile karşılaşabilirsiniz.

Bu hata ilişkili iki tablo arasındaki tablolardan birine Truncate işlemi uygulanarak verilerin tablodan silinmesi işleminde ortaya çıkar ve tablodan verileri bize sildirmez. Çünkü tablolar arasında ilişki vardır. Diğer ilişkili verilere ise ne olacağına SQL Server karar veremez ve bu konuda bize hata sunarak bilgi verir. Örnek olarak Northwind veritabanında aşağıdaki sorguyu çalıştıralım.

TRUNCATE TABLE dbo.Categories

Bize aşağıdaki hatayı verecektir.

Msg 4712, Level 16, State 1, Line 1
Cannot truncate table 'dbo.Products' because it is being referenced by a FOREIGN KEY constraint.

Peki çözümü nasıldır? Aşağıdaki kodu yazıyoruz.

DELETE FROM Categories DBCC CHECKIDENT ('Categories',RESEED, 0)

Bu sefer de aşağıdaki gibi bir hata döndürecektir.

Msg 547, Level 16, State 0, Line 3
The DELETE statement conflicted with the REFERENCE constraint "FK_Products_Categories". The conflict occurred in database "NORTHWND", table "dbo.Products", column 'CategoryID'.
The statement has been terminated.
Checking identity information: current identity value '8'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Bu hatayı gidermek için tablomuz üzerindeki foreign key alanlarını kaldırıyoruz.

ALTER TABLE dbo.Products DROP CONSTRAINT FK_Products_Categories

Şimdi kodumuzu tekrar çalıştıralım.

DELETE FROM Categories DBCC CHECKIDENT ('Categories',RESEED, 0)

Aşağıdaki gibi bir mesaj görmüş olmalısınız.

(8 row(s) affected)
Checking identity information: current identity value '0'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

Şimdi Truncate ile tablomuzun içini boşaltalım.

TRUNCATE TABLE dbo.Categories

İşlemi inceleyelim.

SELECT * FROM dbo.Categories

Tablomuzun içi boşaldı. Diğer tablolarımızın içini de benzer şekilde boşaltabiliriz. Sonra yeniden foreign key ile yeniden ilişki kurabiliriz.

Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.

1.149 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!