想删除除表a以外的所有表,但是并不知道想删除表A的SQL Server表名,实现这样功能的语句应该如何写呢?下面就为您介绍这种不用知道SQL Server表名就可以删除该表以外的所有表的方法,供您参考 。
--首先要删除表,就要删除它的外键约束
- while(11=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(11=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
-
以上就是不用知道SQL Server表名就可以删除该表以外的所有表的方法介绍 。