SQL Server批量删除表,视图,存储过程等数据库元素
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 = 扩展存储过程
该表中包含该数据库中的所有对象,如有那些表 存储过程 视图 等信息