昨天对一测试库要删除所有记录后生成一个备份,本来想自己写个存储过程,想法是从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日志分析和浏览工具,直接解析LDF文件,支持SQL2008,SQL2005,SQL2000. 程序主要功能: 1:\l日志浏览. 用户可以输入指定的日志块序号,程序从指定的日志块往下浏览,可以快速定位需要查看的日志...
① 删除所有资金收入记录 ② 删除所有资金支出记录 ③ 删除所有存款记录 ④ 删除所有取款记录 ⑤ 删除所有转存记录 ⑥ 删除所有刷卡记录 ⑦ 删除所有收支记录 ⑧ 删除所有银行记录 8) 系统管理 ① 快捷方式...
经常将被审计单位整个数据库采集过来,但里面有很多空表,不便于分析。利用此游标,可以轻松地将空表全部删除,同时也可延伸到将某些不超过或超过指定记录数的表删除,非常方便,快捷。
3.预计表前N行记录 4.生成表字段以豆号分割 字段1,字段2....可自定义换行数量 5.显示表的详细信息,字段长度。可直接在查询结果中显示。 6.对查询内容导出EXCEL,高级结果可快速导出。后台处理不会卡程序。在导出...
3.预计表前N行记录 4.生成表字段以豆号分割 字段1,字段2.... 可自定义换行数量 5.显示表的详细信息,字段长度。可直接在查询结果中显示。 6.对查询内容导出EXCEL,高级结果可快速导出。后台处理不会卡程序。在导出...
问:数据库表中的全部记录删除,事先没有备份数据库,如何使用日志文件对该数据库进行恢复? 答:建议用LOG EXPLORER来恢复,图形操作,这个工具特别适合于恢复删除的数据据,它提供的逆操作,把DELETE的数据库...
MSSQL数据恢复工具MDFview.exe是一款读取MSSQL的MDF文件,提取表数据的程序。支持如下功能 1、从损坏的MDF文件中读取表数据 2、误删除行数据恢复 3、误删除表数据修复 无须安装,直接使用。 下载地址...
借阅记录表:用于存储读者借阅图书的记录,包括借阅编号、读者编号、图书编号、借阅日期、应还日期、归还日期等。 图书馆藏表:用于存储图书馆内的图书数量和状态,包括图书编号、馆藏数量、可借数量等。 系统设计:...
中创建几个表,打开其中某个表,进行插删改操作,记录运行情况和处理方法 实验二 SQL 的数据定义(表和索引) 1.复习 SQL 语言中数据定义的相关命令。 2.根据实验样例数据库的要求预先写好相应的命令(完整性约束可不...
SQLSERVER数据修复工具主要用途是从损坏的MDF文件中提取用户需要的表数据误删除表数据和表对象。软件无需安装,直接运行。 使用简介: 从损坏的MDF文件中提取数据 打开程序后,首先选择MDF文件的数据库版本...
管理层可查看所有会员充值、消费、礼品交换历史记录,了解店里运营情况,及时做出英明营业计划。 本系统还根据不用客户制定基于Reporting Services的各种报表。 5,管理员管理 实现管理员的添加、删除功能。管理...
2.预计表总记录数 3.预计表前N行记录 4.生成表字段以豆号分割 字段1,字段2.... 可自定义换行数量 5.显示表的详细信息,字段长度。可直接在查询结果中显示。 6.对查询内容导出EXCEL,高级结果可快速导出。后台处理...
asp删除没有记录的图片需要文件夹(存放图片的文件夹)中的每个图片和数据库中的所有记录进行比较
一款小巧的管理 MySQL 的应用程序,主要特性包括多文档界面,语法突出,拖拽方式的数据库和表格,可编辑/可增加/删除的域,可编辑/可插入/删除的记录,可显示的成员,可执行的SQL 脚本,提供与外程序接口,保存数据...
新手写的代码。 绑定textbox控件。 添加 更新 删除 记录。 数据库是mssql,Admin表 字段 Id Name Pass TrueName Tel Age Address 自己建吧。
Log Explorer主要用于...l 将日志记录导出到文件或者数据库表 l 实时监控数据库事物 l 计算并统计负荷 l 通过有选择性的取消或者重做事物来恢复数据 l 恢复被截断或者删除表中的数据 l 运行SQL脚本 内含注册机!
当您需要移动,删除或仅插入已修改的记录时,这对于部分数据复制也很有用。 我们的应用程序可以达到最大可能的转换速度,因此可以节省您在数据库转换方面的时间用户友好的界面和广泛的功能可以帮助您减少转换所需的...