SqlServer 删除所有表

如果由于外键约束删除table失败,则先删除所有约束:

--/第1步**********删除所有表的外键约束*************************/

DECLARE c1 cursor for
select 'alter table ['+ object_name(parent_obj) + '] drop constraint ['+name+']; '
from sysobjects
where xtype = 'F'
open c1
declare @c1 varchar(8000)
fetch next from c1 into @c1
while(@@fetch_status=0)
begin
exec(@c1)
fetch next from c1 into @c1
end
close c1
deallocate c1

--/第2步**********删除所有表*************************/

use 数据库名(是要删除表的所在的那个数据库的名称)
GO
declare @sql varchar(8000)
while (select count(*) from sysobjects where type='U') > 0
begin
SELECT @sql='drop table ' + name
FROM sysobjects
WHERE (type = 'U')
ORDER BY 'drop table ' + name
exec(@sql) 
end

删除所有的存储过程同理可得,但不需要走第一步,只需将第2步的代码的where type=’U’ 改成 where type=’P’,drop table 改成 drop Procedure。

又写了删除数据保留架构的。。凑合用。。

USE [alumnus_cisisu_edu_cn]
GO

DECLARE @temp TABLE(tableName NVARCHAR(255));

INSERT INTO @temp(tableName)
SELECT Name  FROM SysObjects Where XType='U' ORDER BY Name;


declare @sql varchar(8000);
declare @tableName varchar(255);
while (select count(*) from @temp) > 0
begin
  SELECT @tableName= tableName FROM  @temp;
  
  DELETE  @temp WHERE  tableName=@tableName;
  set @sql = 'DELETE ' + @tableName
  ---print @sql
  exec(@sql) 
end

后来又重新写了一个 利用 sp_MSForEachTable 删除表数据保留结构的语句

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据