不用知道SQL Server表名就可以删除该表以外的所有表


  本文标签:SQL Server表名

  想删除除表a以外的所有表,但是并不知道想删除表A的SQL Server表名,实现这样功能的语句应该如何写呢?下面就为您介绍这种不用知道SQL Server表名就可以删除该表以外的所有表的方法,供您参考  。

  --首先要删除表,就要删除它的外键约束

  1. while(11=1)  
  2. begin  
  3. declare @exit int                  --判断是否还有外键约束  
  4. declare @constr_id varchar(200)    --获取外键约束的ID  
  5. declare @table_id varchar(200)     --获取设外键的表的ID  
  6. declare @table varchar             --获取设外键的表名  
  7. declare @constr_name varchar(100) --获取约束名   
  8. declare @str varchar(100)    --删除表语句字符串  
  9. declare @drop_constr varchar(100)    --删除约束字符串  
  10. declare @conn_str varchar(2000)                   --将删除语句连接起来的字符串      
  11. select   top 1 @constr_id=id,@constr_name=name from sysobjects where type=f 
  12. select   @table_id=fkeyid from sysforeignkeys where constid=@constr_id  
  13. select   @table=name from sysobjects where id=@table_id  
  14. select   @exit=count(*) from sysobjects where type=f 
  15. if(@exit!=0)  
  16. begin  
  17. set @str=alter table 
  18. set @drop_constr=drop constraint 
  19. set @conn_str=@str+ +@table+ +@drop_constr+ +@constr_name  
  20. exec(@conn_str)  
  21. end  
  22. else  
  23. break  
  24. end  
  25.  
  26. if exists(select * from sysobjects where name=proc_drop_table and type=p)  
  27.       drop proc proc_drop_table  
  28. go  
  29. create proc proc_drop_table  
  30. @table_name varchar(200)        --指定你不想删除的表名  
  31. as  
  32. while(11=1)  
  33. begin  
  34. declare @str varchar(200)  
  35. declare @exit int  
  36. set @str=drop table 
  37. select top 1 @str=@str+ +name from sysobjects where type=u and name!=@table_name  
  38. select @exit=count(*) from sysobjects where type=u and name!=@table_name  
  39. print @str  
  40. if(@exit!=0)  
  41. exec(@str)  
  42. else  
  43. begin  
  44. break  
  45. return  
  46. end  
  47. end  
  48. go  
  49.  
  50. exec proc_drop_table a  
  51.  

  以上就是不用知道SQL Server表名就可以删除该表以外的所有表的方法介绍  。