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 保留 。 |