SQL Server’da Tüm Tabloları Silmek

     Merhaba, bu makalemde SQL Server üzerindeki bir veritabanında bulunan tüm tabloların sorgular yardımıyla nasıl silineceğini yazacağım. Bu konuyla alakalı olarak akla gelen en kısa ve basit yöntem veritabanını silip yeniden oluşturmak oluyor. Aslında doğru, en kısa yöntem o; ancak gözden kaçan iki şey var: birincisi, veritabanında sadece tablolar yoksa ne yapacağız, yani veritabanında view, sp, fonksiyon gibi başka objeler de varsa veritabanını silip yeniden oluşturmamız daha zahmetli olacaktır. İkincisi ise eğer benim gibi müşteri ortamında çalışıyorsanız ve yetki konusunda çok cimrilerse dolayısıyla size veritabanını silme yetkisi vermiyorlar. O yüzden aşağıdaki anlatacağım işlemler bazen hayat kurtarıcı olabiliyor.

!!! Sorguları çalıştırmadan önce ilgili veritabanını seçtiğinizden emin olun. !!!

 

Tablolar arası ilişkileri silmek

     Tabloları silebilmemiz için öncelikle aralarındaki ilişkileri silmemiz gerekiyor. Tablolar birbirleri ile bağlantılı olduğunda sadece uygun sıra ile bu tabloları silebiliyoruz ve eğer sizin de 200 küsür tablonuz varsa ve bu tablolar arasındaki ilişkiler içinden çıkılamayacak gibiyse öncelikli olarak bu ilişkileri silmemiz gerekiyor.

     Tablolar arasındaki ilişkilerin tamamını silmek için aşağıdaki sorguyu çalıştırıyoruz:

DECLARE @Sql NVARCHAR(500)
DECLARE @Cursor CURSOR
SET @Cursor = CURSOR FAST_FORWARD FOR

SELECT DISTINCT sql = 'ALTER TABLE [' + TableCons.TABLE_NAME +
    '] DROP [' + ReferentialCons.CONSTRAINT_NAME + ']'
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS ReferentialCons
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TableCons
ON TableCons.CONSTRAINT_NAME = ReferentialCons.CONSTRAINT_NAME

OPEN @Cursor FETCH NEXT FROM @Cursor INTO @Sql
WHILE (@@FETCH_STATUS = 0)
BEGIN
    Exec SP_EXECUTESQL @Sql
    FETCH NEXT FROM @Cursor INTO @Sql
END
CLOSE @Cursor DEALLOCATE @Cursor
GO

     Evet, yukarıdaki sorguyu çalıştırdığımızda tüm tablolarımız birbirinden bağımsız hale gelecek ve istediğimiz şekilde istediğimiz tabloyu silebilir hale geleceğiz. İlişkileri sildik, gelelim tabloları silmeye.

Tabloları silmek

     Tablolarınızın sayısı 3 – 5 tane ise SQL Server Management Studio arayüzü üzerinden tek tek silebilirsiniz veya yine tek tek silmek için her tabloya DROP komutunu uygulayabilirsiniz; ancak tablo sayınız yeterince fazlaysa veya uğraşmak istemiyorum diyorsanız aşağıdaki sorguyu çalıştırmanız yeterli:

EXEC sp_MSForEachTable 'DROP TABLE ?'
GO

     Bu şekilde tüm tablolarımızı silmiş olduk. Amacınız tabloları silmektiyse görevinizi tamamlamış oldunuz. Elbette ki yazıyı okumaya devam edebilirsiniz…

View’ları silmek

     Eğer tabloları silmekle işiniz bitmediyse veya view’ların tamamını silmek istiyorsanız o zaman başka bir sorguya ihtiyacınız olacak. İlgili sorguyu aşağıda bulabilirsiniz:

DECLARE @query VARCHAR(MAX) = '';
SELECT @query = @query + 'DROP VIEW [' + name + '];' FROM sys.views;
EXEC(@query);
Stored Procedure’leri silmek

     Tablo ve view’ların nasıl silindiğini paylaştım. Sırada SP’lerin nasıl silindiği var. SP’leri silmek için cursor kullanmamız gerekiyor. Yani bir nevi foreach döngüsü gibi düşünebilirsiniz. İlgili sorgu aşağıda:

DECLARE @procedureName VARCHAR(500)
DECLARE cur CURSOR

FOR SELECT [name] FROM sys.objects WHERE TYPE = 'p'
OPEN cur
FETCH NEXT FROM cur INTO @procedureName

WHILE @@fetch_status = 0
BEGIN
    EXEC('DROP PROCEDURE ' + @procedureName)
    FETCH NEXT FROM cur INTO @procedureName
END

CLOSE cur
DEALLOCATE cur
Fonksiyonları silmek

     Son olarak fonksiyonları silmek için gerekli sorgu kaldı. Bu sorgu SP’leri silmek için kullanılan sorgu ile çok benzer. Sadece iki yerde değişiklik yapmak gerekiyor. İlgili sorgu aşağıda:

DECLARE @functionName VARCHAR(500)
DECLARE cur CURSOR

FOR SELECT [name] FROM sys.objects WHERE TYPE = 'fn'
OPEN cur
FETCH NEXT FROM cur INTO @functionName

WHILE @@fetch_status = 0
BEGIN
    EXEC('DROP FUNCTION ' + @functionName)
    FETCH NEXT FROM cur INTO @functionName
END

CLOSE cur
DEALLOCATE cur

     Böylelikle tüm objeleri silmiş olduk. Yukarıdaki sorguların tümünü bir dosyaya kaydedip çalıştırırsanız veritabanınızdaki her şeyi silmiş olursunuz (kullanıcılar hariç). Çok sık lazım olmasa da bazen gerçekten önem arz edebiliyor. Bir sonraki makalede görüşmek üzere…

Gelen arama terimleri:
  • mssql management studio bağlantılı tabloları silme (1)

Bu makaleye 4 yorum yapılmış

  • Ahmet

    21 Şubat 2014 at 13:45 Cevapla

    teşekkürler

  • Taner

    09 Eylül 2017 at 16:37 Cevapla

    Müthiş

  • samet akcay

    05 Ekim 2017 at 16:52 Cevapla

    tüm tabloları değil de adında “blabla” geçen tabloları silmek istiyorsak napıcaz?
    veya adı “blabla” ya benzeyen tabloları silmek için?

    cevaplarsanız çok sevinirim.

Yorum Yapın

*

warning
www.kemalkefeli.com.tr üzerindeki herhangi bir yazının veya kodun izinsiz olarak başka bir yerde kullanılması yasaktır.