主题:经典的SQL SERVER 语句,删除指定表之外的所有表,不知道所要删除的表名
我们想删除,除表a以外的所有表,但是并不知道想删除表的表名!语句如下
--首先要删除表,就要删除它的外键约束
while(1=1)
begin
declare @exit int --判断是否还有外键约束
declare @constr_id varchar(200) --获取外键约束的ID
declare @table_id varchar(200) --获取设外键的表的ID
declare @table varchar --获取设外键的表名
declare @constr_name varchar(100) --获取约束名
declare @str varchar(100) --删除表语句字符串
declare @drop_constr varchar(100) --删除约束字符串
declare @conn_str varchar(2000) --将删除语句连接起来的字符串
select top 1 @constr_id=id,@constr_name=name from sysobjects where type='f'
select @table_id=fkeyid from sysforeignkeys where constid=@constr_id
select @table=name from sysobjects where id=@table_id
select @exit=count(*) from sysobjects where type='f'
if(@exit!=0)
begin
set @str='alter table'
set @drop_constr='drop constraint'
set @conn_str=@str+' '+@table+' '+@drop_constr+' '+@constr_name
exec(@conn_str)
end
else
break
end
if exists(select * from sysobjects where name='proc_drop_table' and type='p')
drop proc proc_drop_table
go
create proc proc_drop_table
@table_name varchar(200) --指定你不想删除的表名
as
while(1=1)
begin
declare @str varchar(200)
declare @exit int
set @str='drop table'
select top 1 @str=@str+' '+name from sysobjects where type='u' and name!=@table_name
select @exit=count(*) from sysobjects where type='u' and name!=@table_name
print @str
if(@exit!=0)
exec(@str)
else
begin
break
return
end
end
go
exec proc_drop_table a