Ana Sayfa / Sql Kurs / Tek bir komutla tüm veritabanını silme Procedure

Tek bir komutla tüm veritabanını silme Procedure

Tek bir komutla tüm veritabanını silme veritabanı yöneticilerinin en çok sıkıntı çektiği konulardan bir tanesi işleri otomatik olarak değilde manuel olarak yapmak.Çünkü bazen bir veritabanının içindeki tüm tabloların verilerini silmek gerekir.Bunu en hızlı ve en az enerji ile yapabiliriz.Genelde delete ve truncate komutları ile bu tür işler yapılır.Ancak eğer constraint verileri silerken hata vericektir yada triggerlar.Constraintlerin bir kötü özelliğide budur.Bu sebeple en kolay yol aşağıdaki gibidir.

Yeni bir query penceresi açıp üstten veritabanını seçtikten sonra

EXEC sp_MSForEachTable ‘DELETE FROM ?’–Burdaki soru işareti her tabloyu gezdiğinde tablonun adını alıp soru işaretinin yerine tek tek her tablonun içindeki bilgileri silip diğer tabloya geçer.For each mantığı tüm dataları siler dikkat etmek gereklidir.

Eğer constraint olan tablolarımız ve buna tablolarda datalarımız var ise asağıdaki prosedür işinizi görecektir.Önce constraintlerin verileri engellemesi ortadan kaldırılır.Sonra trigger var ise tüm triggerları kapatır.Daha sonra dataları siler.Aynı iş mantığı ile datalar silindikten hemen sonra constraintler aktif hale getirilir,triggerlar aktif hale getirilir.En son tüm tablolardaki mevcut kayıt satır sayılarını gösterir.

CREATE PROCEDURE sp_TümDatalarıSil

AS
EXEC sp_MSForEachTable ‘ALTER TABLE ? NOCHECK CONSTRAINT ALL’
EXEC sp_MSForEachTable ‘ALTER TABLE ? DISABLE TRIGGER ALL’
EXEC sp_MSForEachTable ‘DELETE FROM ?’
EXEC sp_MSForEachTable ‘ALTER TABLE ? CHECK CONSTRAINT ALL’
EXEC sp_MSForEachTable ‘ALTER TABLE ? ENABLE TRIGGER ALL’
EXEC sp_MSFOREACHTABLE ‘SELECT * FROM ?’
GO

Hepsi Bu kadar kolay gelsin.


Ayrıca bknz.

t-sql değişken kullanımı

T-SQL DEĞİŞKEN TANIMLAMA VE KULLANIMI

T-SQL DEĞİŞKEN TANIMLAMA VE KULLANIMI Değişkenler, programın veya kodların icra süresince belirli bir değer tutan …

3 yorumlar

  1. Table lar içindeki tüm dataları değilde belli kriterlere sahip dataları silmek istesek, mesela 2013 yılı öncesi verileri silmek istesek nasıl yapacağız.(Trigger ve constraitler bil hayli fazla db de)

    • Kolay, eğer belli verileri filtreleyerek silmek istersen örneğin date isminde bir field’in var ve where date>’01.01.2013′ and date<'31.12.2013' şeklinde kullanırsan problemin çözülmüş olur.

  2. Yukarıdaki procedure de
    EXEC sp_MSForEachTable ‘DELETE FROM ?’

    alanına ekleme yapacağım fakat bu Procedure tüm table ları gezer denilyor, o yüzden sormak istedim. Bazı tablolarımda date alan hiç yok bu sefer hata vermez mi. Denemekte fayda var bi deneyeyim bilgi vereceğim…

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir