`
famoushz
  • 浏览: 2870715 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

删除所有表的所有记录(MSSQL)

阅读更多

昨天对一测试库要删除所有记录后生成一个备份,本来想自己写个存储过程,想法是从sysobjects表中查出所有用户表,挨个truncate table,实现时发现这样做只能用游标,在网上查了下,MSSQL本身就有这样的游标查询,叫“sp_MSForEachTable ”

CREATE PROCEDURE sp_DeleteAllData
AS
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? DISABLE TRIGGER ALL'
EXEC sp_MSForEachTable 'DELETE FROM ?'
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL'
EXEC sp_MSForEachTable 'ALTER TABLE ? ENABLE TRIGGER ALL'
EXEC sp_MSFOREACHTABLE 'SELECT * FROM ?'
GO

上面这个就搞定了。

稍微分析下sp_MSForEachTable 这个存储过程,

create proc sp_MSforeachtable
@command1 nvarchar(2000), @replacechar nchar(1) = N'?', @command2 nvarchar(2000) = null,
   @command3 nvarchar(2000) = null, @whereand nvarchar(2000) = null,
@precommand nvarchar(2000) = null, @postcommand nvarchar(2000) = null
as
/* This proc returns one or more rows for each table (optionally, matching @where), with each table defaulting to its own result set */
/* @precommand and @postcommand may be used to force a single result set via a temp table. */

/* Preprocessor won't replace within quotes so have to use str(). */
declare @mscat nvarchar(12)
select @mscat = ltrim(str(convert(int, 0x0002)))

if (@precommand is not null)
   exec(@precommand)

/* Create the select */
   exec(N'declare hCForEach cursor global for select ''['' + REPLACE(user_name(uid), N'']'', N'']]'') + '']'' + ''.'' + ''['' + REPLACE(object_name(id), N'']'', N'']]'') + '']'' from dbo.sysobjects o '
         + N' where OBJECTPROPERTY(o.id, N''IsUserTable'') = 1 ' + N' and o.category & ' + @mscat + N' = 0 '
         + @whereand)
declare @retval int
select @retval = @@error
if (@retval = 0)
   exec @retval = sp_MSforeach_worker @command1, @replacechar, @command2, @command3

if (@retval = 0 and @postcommand is not null)
   exec(@postcommand)

return @retval

GO

重点在于定义了一个cursor为hcForEach,然后把set给sp_MSforeach_worker 就行了,而这个存储过程查询条件也很有意思,本来我认为应该以xtype以条件,看过后才知道人家用了OBJECTPROPERTY函数,意义上没变化, 不过程序读起来感到优雅和简单,这就是差距啊。

还有一点要说明的它的另一个条件category & 0x0002 =0,看了下联机帮助说是

 

category int 用于发布、约束和标识。

在网上google下也没找到有用的信息,不过自己看了下,这个是用二进制做标志位的,第二位如果是1的话就是系统的东西,比如说在2000中存关 系图的dtproperties表就是系统表,但是用OBJECTPROPERTY(o.id, 'IsUserTable') = 1且能把这个表查出来,所以加上category这个条件才能更严谨些。2005这个表就没有了,变成了真正的系统表了。

分享到:
评论

相关推荐

    删除MSSQL数据库中的表和清除记录小工具有源代码

    删除MSSQL数据库中表小工具,操作很方便。开发项目的时候,要清除一些数据或删除某些表很方便哦。

    易语言mssql数据库操作实例

    一个部门维护的简单实例,易语言操作mssql数据库。涉及连接数据库、新增、修改、删除、保存、打印数据表等基本操作。

    MSSQL日志解析和浏览工具

    一款真正意义上的MSSQL日志分析和浏览工具,直接解析LDF文件,支持SQL2008,SQL2005,SQL2000. 程序主要功能: 1:\l日志浏览. 用户可以输入指定的日志块序号,程序从指定的日志块往下浏览,可以快速定位需要查看的日志...

    家庭财务管理系统JSP+MSSQL版

    ① 删除所有资金收入记录 ② 删除所有资金支出记录 ③ 删除所有存款记录 ④ 删除所有取款记录 ⑤ 删除所有转存记录 ⑥ 删除所有刷卡记录 ⑦ 删除所有收支记录 ⑧ 删除所有银行记录 8) 系统管理 ① 快捷方式...

    SQL SERVER2000中批量删除空表的游标

    经常将被审计单位整个数据库采集过来,但里面有很多空表,不便于分析。利用此游标,可以轻松地将空表全部删除,同时也可延伸到将某些不超过或超过指定记录数的表删除,非常方便,快捷。

    MSSQL Server 管理器 V2.0.0.0

    3.预计表前N行记录 4.生成表字段以豆号分割 字段1,字段2....可自定义换行数量 5.显示表的详细信息,字段长度。可直接在查询结果中显示。 6.对查询内容导出EXCEL,高级结果可快速导出。后台处理不会卡程序。在导出...

    MSSQL Server 管理器 V1.0.0.138

    3.预计表前N行记录 4.生成表字段以豆号分割 字段1,字段2.... 可自定义换行数量 5.显示表的详细信息,字段长度。可直接在查询结果中显示。 6.对查询内容导出EXCEL,高级结果可快速导出。后台处理不会卡程序。在导出...

    Log Explorer 4.2 MSSQL数据库日志查看及数据恢复工具

    问:数据库表中的全部记录删除,事先没有备份数据库,如何使用日志文件对该数据库进行恢复? 答:建议用LOG EXPLORER来恢复,图形操作,这个工具特别适合于恢复删除的数据据,它提供的逆操作,把DELETE的数据库...

    MSSQL数据修复工具

    MSSQL数据恢复工具MDFview.exe是一款读取MSSQL的MDF文件,提取表数据的程序。支持如下功能 1、从损坏的MDF文件中读取表数据 2、误删除行数据恢复 3、误删除表数据修复 无须安装,直接使用。 下载地址...

    图书管理系统(java+mssql)

    借阅记录表:用于存储读者借阅图书的记录,包括借阅编号、读者编号、图书编号、借阅日期、应还日期、归还日期等。 图书馆藏表:用于存储图书馆内的图书数量和状态,包括图书编号、馆藏数量、可借数量等。 系统设计:...

    数据库学习资源的分享(Mac在DOCKER上安装MSSQL使用Navicat)(不建议下载)

    中创建几个表,打开其中某个表,进行插删改操作,记录运行情况和处理方法 实验二 SQL 的数据定义(表和索引) 1.复习 SQL 语言中数据定义的相关命令。 2.根据实验样例数据库的要求预先写好相应的命令(完整性约束可不...

    鱼肠MSSQL数据库修复软件 v3.3.zip

    SQLSERVER数据修复工具主要用途是从损坏的MDF文件中提取用户需要的表数据误删除表数据和表对象。软件无需安装,直接运行。   使用简介: 从损坏的MDF文件中提取数据 打开程序后,首先选择MDF文件的数据库版本...

    VIP会员积分系统MSSQL v2.0

    管理层可查看所有会员充值、消费、礼品交换历史记录,了解店里运营情况,及时做出英明营业计划。 本系统还根据不用客户制定基于Reporting Services的各种报表。 5,管理员管理 实现管理员的添加、删除功能。管理...

    MSSQL 查询管理器 V1.0.0.135

    2.预计表总记录数 3.预计表前N行记录 4.生成表字段以豆号分割 字段1,字段2.... 可自定义换行数量 5.显示表的详细信息,字段长度。可直接在查询结果中显示。 6.对查询内容导出EXCEL,高级结果可快速导出。后台处理...

    asp删除mssql数据库中没有记录的图片代码

    asp删除没有记录的图片需要文件夹(存放图片的文件夹)中的每个图片和数据库中的所有记录进行比较

    mssql-front

    一款小巧的管理 MySQL 的应用程序,主要特性包括多文档界面,语法突出,拖拽方式的数据库和表格,可编辑/可增加/删除的域,可编辑/可插入/删除的记录,可显示的成员,可执行的SQL 脚本,提供与外程序接口,保存数据...

    vb2005 and mssql ado.net实战

    新手写的代码。 绑定textbox控件。 添加 更新 删除 记录。 数据库是mssql,Admin表 字段 Id Name Pass TrueName Tel Age Address 自己建吧。

    Log Explorer for MSSQL

    Log Explorer主要用于...l 将日志记录导出到文件或者数据库表 l 实时监控数据库事物 l 计算并统计负荷 l 通过有选择性的取消或者重做事物来恢复数据 l 恢复被截断或者删除表中的数据 l 运行SQL脚本 内含注册机!

    DBConvert for MSSQL and DB2 2.1.1 中文免费版.zip

    当您需要移动,删除或仅插入已修改的记录时,这对于部分数据复制也很有用。 我们的应用程序可以达到最大可能的转换速度,因此可以节省您在数据库转换方面的时间用户友好的界面和广泛的功能可以帮助您减少转换所需的...

Global site tag (gtag.js) - Google Analytics