Xoá sạch toàn bộ database trong sql server (table, view, proc, function, foreign key, trigger)

Trong thực tế có 1 số trường hợp bạn không có quyền xoá database, cũng không có quyền tạo DB user mới, nên bạn chỉ muốn: XÓA TOÀN BỘ OBJECT TRONG DATABASE (làm sạch DB) vẫn giữ nguyên database + giữ nguyên DB user hiện tại.

Dưới đây là một script duy nhất, chạy 1 lần để xoá sạch toàn bộ object trong database (table, view, proc, function, foreign key, trigger).

An toàn cho trường hợp bạn không có quyền xoá database, và không xoá user.


-------------------------------------------------------
-- DROP ALL FOREIGN KEYS
-------------------------------------------------------
DECLARE @sql NVARCHAR(MAX) = N'';
SELECT @sql += 'ALTER TABLE ['
+ OBJECT_SCHEMA_NAME(parent_object_id) + '].['
+ OBJECT_NAME(parent_object_id)
+ '] DROP CONSTRAINT [' + name + '];' + CHAR(13)
FROM sys.foreign_keys;

EXEC sp_executesql @sql;

-------------------------------------------------------
-- DROP ALL TABLES
-------------------------------------------------------
SET @sql = N'';
SELECT @sql += 'DROP TABLE ['
+ SCHEMA_NAME(schema_id) + '].['
+ name + '];' + CHAR(13)
FROM sys.tables;

EXEC sp_executesql @sql;

-------------------------------------------------------
-- DROP ALL VIEWS
-------------------------------------------------------
SET @sql = N'';
SELECT @sql += 'DROP VIEW ['
+ SCHEMA_NAME(schema_id) + '].['
+ name + '];' + CHAR(13)
FROM sys.views;

EXEC sp_executesql @sql;

-------------------------------------------------------
-- DROP ALL STORED PROCEDURES
-------------------------------------------------------
SET @sql = N'';
SELECT @sql += 'DROP PROCEDURE ['
+ SCHEMA_NAME(schema_id) + '].['
+ name + '];' + CHAR(13)
FROM sys.procedures;

EXEC sp_executesql @sql;

-------------------------------------------------------
-- DROP ALL FUNCTIONS
-------------------------------------------------------
SET @sql = N'';
SELECT @sql += 'DROP FUNCTION ['
+ SCHEMA_NAME(schema_id) + '].['
+ name + '];' + CHAR(13)
FROM sys.objects
WHERE type IN ('FN','IF','TF');

EXEC sp_executesql @sql;

-------------------------------------------------------
-- DROP ALL DATABASE-LEVEL TRIGGERS
-------------------------------------------------------
SET @sql = N'';
SELECT @sql += 'DROP TRIGGER [' + name + '];' + CHAR(13)
FROM sys.triggers
WHERE parent_class = 0; -- database-level only

EXEC sp_executesql @sql;

-------------------------------------------------------
-- DONE – DB IS NOW CLEAN
-------------------------------------------------------
PRINT 'Database cleaned successfully!';