SQL Server’da Veritabanının İçeriğini Boşaltmak
Herkese merhaba,
Bu yazıda SQL Server’da veritabanının içeriğini boşaltmak hakkında bilgi vereceğim.
SQL Server’da bazı durumlarda veritabanının içeriğinin komple, yani her şeyiyle silinmesini isteyebiliriz.
Aşağıdaki kodu kullanarak bu işlemi rahatlıkla yapabilirsiniz.
Uyarı : Bu kodu canlı çalışan sistem üzerinde ya da herhangi bir deneme veritabanı üzerinde test etmeden kesinlikle denemeyin! Aksi durumda tüm sorumluluk size aittir.
--Tüm prosedürleri veritabanından kaldırmak
DECLARE @name VARCHAR(128);
DECLARE @SQL VARCHAR(254);
SELECT @name =
(
SELECT TOP 1
[name]
FROM sysobjects
WHERE [type] = 'P'
AND category = 0
ORDER BY [name]
);
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP PROCEDURE [dbo].[' + RTRIM(@name) + ']';
EXEC (@SQL);
PRINT 'Kaldırılan Prosedür: ' + @name;
SELECT @name =
(
SELECT TOP 1
[name]
FROM sysobjects
WHERE [type] = 'P'
AND category = 0
AND [name] > @name
ORDER BY [name]
);
END;
--Tüm viewları veritabanından kaldırmak
DECLARE @name VARCHAR(128);
DECLARE @SQL VARCHAR(254);
SELECT @name =
(
SELECT TOP 1
[name]
FROM sysobjects
WHERE [type] = 'V'
AND category = 0
ORDER BY [name]
);
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP VIEW [dbo].[' + RTRIM(@name) + ']';
EXEC (@SQL);
PRINT 'Kaldırılan View: ' + @name;
SELECT @name =
(
SELECT TOP 1
[name]
FROM sysobjects
WHERE [type] = 'V'
AND category = 0
AND [name] > @name
ORDER BY [name]
);
END;
--Tüm fonksiyonları veritabanından kaldırmak
DECLARE @name VARCHAR(128);
DECLARE @SQL VARCHAR(254);
SELECT @name =
(
SELECT TOP 1
[name]
FROM sysobjects
WHERE [type] IN ( N'FN', N'IF', N'TF', N'FS', N'FT' )
AND category = 0
ORDER BY [name]
);
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP FUNCTION [dbo].[' + RTRIM(@name) + ']';
EXEC (@SQL);
PRINT 'Kaldırılan Fonksiyon : ' + @name;
SELECT @name =
(
SELECT TOP 1
[name]
FROM sysobjects
WHERE [type] IN ( N'FN', N'IF', N'TF', N'FS', N'FT' )
AND category = 0
AND [name] > @name
ORDER BY [name]
);
END;
--Tüm foreign keyleri veritabanından kaldırmak
DECLARE @name VARCHAR(128);
DECLARE @constraint VARCHAR(254);
DECLARE @SQL VARCHAR(254);
SELECT @name =
(
SELECT TOP 1
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_CATALOG = DB_NAME()
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
ORDER BY TABLE_NAME
);
WHILE @name IS NOT NULL
BEGIN
SELECT @constraint =
(
SELECT TOP 1
CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_CATALOG = DB_NAME()
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
AND TABLE_NAME = @name
ORDER BY CONSTRAINT_NAME
);
WHILE @constraint IS NOT NULL
BEGIN
SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) + '] DROP CONSTRAINT [' + RTRIM(@constraint) + ']';
EXEC (@SQL);
PRINT 'Kaldırılan FK Constraint: ' + @constraint + ' on ' + @name;
SELECT @constraint =
(
SELECT TOP 1
CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_CATALOG = DB_NAME()
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
AND CONSTRAINT_NAME <> @constraint
AND TABLE_NAME = @name
ORDER BY CONSTRAINT_NAME
);
END;
SELECT @name =
(
SELECT TOP 1
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_CATALOG = DB_NAME()
AND CONSTRAINT_TYPE = 'FOREIGN KEY'
ORDER BY TABLE_NAME
);
END;
--Tüm primary keyleri veritabanından kaldırmak
DECLARE @name VARCHAR(128);
DECLARE @constraint VARCHAR(254);
DECLARE @SQL VARCHAR(254);
SELECT @name =
(
SELECT TOP 1
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_CATALOG = DB_NAME()
AND CONSTRAINT_TYPE = 'PRIMARY KEY'
ORDER BY TABLE_NAME
);
WHILE @name IS NOT NULL
BEGIN
SELECT @constraint =
(
SELECT TOP 1
CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_CATALOG = DB_NAME()
AND CONSTRAINT_TYPE = 'PRIMARY KEY'
AND TABLE_NAME = @name
ORDER BY CONSTRAINT_NAME
);
WHILE @constraint IS NOT NULL
BEGIN
SELECT @SQL = 'ALTER TABLE [dbo].[' + RTRIM(@name) + '] DROP CONSTRAINT [' + RTRIM(@constraint) + ']';
EXEC (@SQL);
PRINT 'Kaldırılan PK Constraint: ' + @constraint + ' on ' + @name;
SELECT @constraint =
(
SELECT TOP 1
CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_CATALOG = DB_NAME()
AND CONSTRAINT_TYPE = 'PRIMARY KEY'
AND CONSTRAINT_NAME <> @constraint
AND TABLE_NAME = @name
ORDER BY CONSTRAINT_NAME
);
END;
SELECT @name =
(
SELECT TOP 1
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_CATALOG = DB_NAME()
AND CONSTRAINT_TYPE = 'PRIMARY KEY'
ORDER BY TABLE_NAME
);
END;
--Tüm tabloları veritabanından kaldırmak
DECLARE @name VARCHAR(128);
DECLARE @SQL VARCHAR(254);
SELECT @name =
(
SELECT TOP 1
[name]
FROM sysobjects
WHERE [type] = 'U'
AND category = 0
ORDER BY [name]
);
WHILE @name IS NOT NULL
BEGIN
SELECT @SQL = 'DROP TABLE [dbo].[' + RTRIM(@name) + ']';
EXEC (@SQL);
PRINT 'Kaldırılan Table: ' + @name;
SELECT @name =
(
SELECT TOP 1
[name]
FROM sysobjects
WHERE [type] = 'U'
AND category = 0
AND [name] > @name
ORDER BY [name]
);
END;
Yukarıdaki kod bloğunu Northwind veritabanı üzerinde test edeceğim. Northwind veritabanı seçili iken kodumu çalıştırıyorum.
İşlem başarı ile gerçekleşti ve kaldırılan objeler de listelenmiş oldu.
Herkese çalışma hayatında ve yaşamında başarılar kolaylıklar.