Tôi biết đây là một bài viết cũ nhưng tôi đã thử tất cả các câu trả lời ở đây trên vô số cơ sở dữ liệu và đôi khi tôi thấy tất cả chúng đều hoạt động nhưng không phải lúc nào cũng cho các câu hỏi khác nhau (tôi chỉ có thể giả định) về SQL Server.
Cuối cùng tôi đã nghĩ ra cái này Tôi đã thử nghiệm điều này ở mọi nơi (nói chung) tôi có thể và nó hoạt động (không có bất kỳ thủ tục lưu trữ ẩn nào).
Đối với lưu ý chủ yếu trên SQL Server 2014. (nhưng hầu hết các phiên bản khác tôi đã thử nó dường như cũng hoạt động tốt).
Tôi đã thử trong khi các vòng lặp và null, v.v., con trỏ và nhiều dạng khác nhưng chúng dường như luôn bị lỗi trên một số cơ sở dữ liệu nhưng không phải là không có lý do rõ ràng.
Việc đếm và sử dụng số đó để lặp đi lặp lại dường như luôn hoạt động trên mọi thứ mà tôi đã thử nghiệm.
USE [****YOUR_DATABASE****]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Drop all referential integrity constraints --
-- Drop all Primary Key constraints. --
DECLARE @sql NVARCHAR(296)
DECLARE @table_name VARCHAR(128)
DECLARE @constraint_name VARCHAR(128)
SET @constraint_name = ''
DECLARE @row_number INT
SELECT @row_number = Count(*) FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc1
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc2 ON tc2.CONSTRAINT_NAME = rc1.CONSTRAINT_NAME
WHILE @row_number > 0
BEGIN
BEGIN
SELECT TOP 1 @table_name = tc2.TABLE_NAME, @constraint_name = rc1.CONSTRAINT_NAME FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS rc1
LEFT JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS tc2 ON tc2.CONSTRAINT_NAME = rc1.CONSTRAINT_NAME
AND rc1.CONSTRAINT_NAME > @constraint_name
ORDER BY rc1.CONSTRAINT_NAME
SELECT @sql = 'ALTER TABLE [dbo].[' + RTRIM(@table_name) +'] DROP CONSTRAINT [' + RTRIM(@constraint_name)+']'
EXEC (@sql)
PRINT 'Dropped Constraint: ' + @constraint_name + ' on ' + @table_name
SET @row_number = @row_number - 1
END
END
GO
-- Drop all tables --
DECLARE @sql NVARCHAR(156)
DECLARE @name VARCHAR(128)
SET @name = ''
DECLARE @row_number INT
SELECT @row_number = Count(*) FROM sysobjects WHERE [type] = 'U' AND category = 0
WHILE @row_number > 0
BEGIN
SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = 'U' AND category = 0 AND [name] > @name ORDER BY [name])
SELECT @sql = 'DROP TABLE [dbo].[' + RTRIM(@name) +']'
EXEC (@sql)
PRINT 'Dropped Table: ' + @name
SET @row_number = @row_number - 1
END
GO