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.