SQLserver删除某数据库中所有表实现思路


  本文标签:删除表,约束,清空数据库

方便删除数据库中所有的数据表,清空数据库,有些有约束,不能直接delete,需要先删除库中的约束,代码如下

复制代码 代码如下:

--删除所有约束
DECLARE c1 cursor for
selectalter table [+ object_name(parent_obj)+] drop constraint [+name+];
from sysobjects
where xtype =F
open c1
declare @c1 varchar(8000)
fetch nextfrom c1 into@c1
while(@@fetch_status=0)
begin
exec(@c1)
fetch nextfrom c1 into@c1
end
close c1
deallocate c1
--删除数据库所有表
declare @tname varchar(8000)
set@tname=
select@tname=@tname+Name+,from sysobjects where xtype=U
select@tname=drop table + left(@tname,len(@tname)-1)
exec(@tname)

然后清空数据库中的所有表
如果需要删除存储过程等只需要将上面的做如下修改就行了的where xtype=U 改成 where xtype=P,drop table 改成 drop Procedure

sysobjects的xtype代表含义:

在数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在表中占一行 。只有在 tempdb 内,每个临时对象才在该表中占一行 。

列名 数据类型 描述
name sysname 对象名 。
Id int 对象标识号 。
xtype char(2) 对象类型 。可以是下列对象类型中的一种:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
L = 日志
FN = 标量函数
IF = 内嵌表函数
P = 存储过程
PK = PRIMARY KEY 约束(类型是 K)
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
UQ = UNIQUE 约束(类型是 K)
V = 视图
X = 扩展存储过程

uid smallint 所有者对象的用户 ID 。
info smallint 保留 。仅限内部使用 。
status int 保留 。仅限内部使用 。
base_schema_
ver int 保留 。仅限内部使用 。
replinfo int 保留 。供复制使用 。
parent_obj int 父对象的对象标识号(例如,对于触发器或约束,该标识号为表 ID) 。
crdate datetime 对象的创建日期 。
ftcatid smallint 为全文索引注册的所有用户表的全文目录标识符,对于没有注册的所有用户表则为 0 。
schema_ver int 版本号,该版本号在每次表的架构更改时都增加 。
stats_schema_
ver int 保留 。仅限内部使用 。
type char(2) 对象类型 。可以是下列值之一:
C = CHECK 约束
D = 默认值或 DEFAULT 约束
F = FOREIGN KEY 约束
FN = 标量函数
IF = 内嵌表函数
K = PRIMARY KEY 或 UNIQUE 约束
L = 日志
P = 存储过程
R = 规则
RF = 复制筛选存储过程
S = 系统表
TF = 表函数
TR = 触发器
U = 用户表
V = 视图
X = 扩展存储过程
userstat smallint 保留 。
sysstat smallint 内部状态信息 。
indexdel smallint 保留 。
refdate datetime 留作以后使用 。
version int 留作以后使用 。
deltrig int 保留 。
instrig int 保留 。
updtrig int 保留 。
seltrig int 保留 。
category int 用于发布、约束和标识 。
cache smallint 保留 。