SQL Server批量删除表,视图,存储过程等数据库元素

时间:2021-11-21 13:51:18

 

 1  --第一步,读取所有视图 
 2 select identity(int,1,1) flag,[name] names into #tmp 
 3 from sysobjects where crdate>'2012-07-09'  
 4 
 5         -- 执行上一步之后再执行下面:
 6 --第二步循环删除 
 7 declare @tb varchar(1000) ,@a int,@b int,@sql varchar(8000) 
 8 select @a=min(flag),@b=max(flag) from #tmp 
 9 while @a<=@b 
10     begin 
11         select @tb=names from #tmp where flag=@a 
12         set @sql='drop function '+@tb 
13         exec(@sql) 
14         set @a=@a+1 
15     end 
16 --最后别忘记删除临时表
17     DROP TABLE #tmp 
18 select *   from sysobjects 
19 where crdate>'2012-07-09'  
20  

根据需要删除的内容过滤 和更改 第12行代码

sysobjects

  系统对象表。 保存当前数据库的对象,如约束、默认值、日志、规则、存储过程等

  sysobjects 重要字段解释:

  sysObjects (

  Name sysname, --object 名称

  id int, --object id

  xtype char(2), -- object 类型

  type char(2), -- Object 类型(与xtype 似乎一模一样? 有点郁闷…)

  uid smallint, -- object 所有者的ID

  ... --其他的字段不常用到。

  )

  注:需要解释的是 xtype 和type 是一模一样的,他的数据为:

  C = CHECK 约束

  D = 默认值或 DEFAULT 约束

  F = FOREIGN KEY 约束

  FN = 标量函数

  IF = 内嵌表函数

  K = PRIMARY KEY 或 UNIQUE 约束

  L = 日志

  P = 存储过程

  R = 规则

  RF = 复制筛选存储过程

  S = 系统表

  TF = 表函数

  TR = 触发器

  U = 用户表

  V = 视图

     X = 扩展存储过程

  该表中包含该数据库中的所有对象,如有那些表 存储过程 视图 等信息