我们想删除,除表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