19 Ekim 2019, Cumartesi
Ana Sayfa / Manşet / SQL Server Tablo Silme – Stored Procedure Silme

SQL Server Tablo Silme – Stored Procedure Silme

Sql Server üzerinde tabloları tek tek silmek yerine kodlarla silebiliriz. Tablolar ilişkili ise silmek biraz daha zahmetli olabiliyor. Bunun için de Tablo ilişkilerini kaldırıp silmek gerekiyor. Veri tabanında tablo silme işlemi yanında MsSql Stored Procedure silme için de kod yazmamız gerekebilir. Bu makalede bu konuları ele alacağız

DİKKAT
Sorguları çalıştırmadan önce hangi veritabanı üzerinde çalıştığınızdan emin olun. Aksi taktirde hiç hoş olmayan tablo silme durumu ile karşılaşabilirsiniz.

MsSql Server 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. Eğer sizin de onlarca tablonuz varsa, bu tablolar arasındaki ilişkileri çözmek, ilgili sırayı takip etmek saatlerinizi alır.

   Tablolar arasındaki ilişkileri silmek için aşağıdaki sorguyu koşturuyoruz:

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 koşturduğumuzda veritabanındaki tablolarımız birbirinden bağımsız hale gelecek ve istediğimiz şekilde istediğimiz tabloyu silebilir hale geleceğiz. Veritabanı Tablo ilişkileri yukardaki kodlarla silindi, bağları koparıldı. Tablolar artık silinebilir.

MsSql Server Tabloları silmek

MS Sql Server tablo sayısı az olduğunda SQL Server Management Studio arayüzü üzerinden tek tek silmek kolaydır. Eğer tablo sayısı çoksa bu yöntem yerine aşağıdaki sorguyu koşturmak sizin için iyi bir çözüm olabilir.

EXEC sp_MSForEachTable 'DROP TABLE ?'
GO

MsSql Serverda tablo silme işlemi yukardaki kod ile tamamlandı. Tablo silme işlemi burada tamamlanıyor. Ama Profesyonel sistemlerde durum biraz daha karmaşık.

MsSql Server View silmek

MsSql Server View silme konusunda aşağıdaki sorguyu koşturmalısınız. View kullanımı konusunda bir yazı ele alacağım.

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

MsSql Server Stored Procedure’leri silmek

Sql Server Tablo ve view silme işlemi tamamlandı. Sırada SP Stored Procedure silme işlemi 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

MsSql Server Fonksiyonları silmek

Son olarak fonksiyonları silmek için gerekli sorgu kısmına değinelim. Bu sorgu SP’leri silmek için kullanılan sorgu ile çok benzer. Sadece iki yerde değişiklik yapmak gerekiyor. Sql Server fonksiyon silme işlemi kodları aşağıda verilmiştir.

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