巧用SQL剔除数据库空白表“两招”,本文主要内容关键词为:巧用论文,两招论文,空白论文,数据库论文,SQL论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。
审计人员在实施计算机辅助审计时,常常遇到这样的问题:审计人员需要从数据库中几十甚至数百张表中找出有用信息,而一个数据库中很多表是无记录的,如果能先将这一部分的空白表剔除,将大大缩小审计人员查找数据表的范围,提高数据分析的效率。
通过利用SQLServer游标工具、系统表格[sysobjects]、存储过程sp_MSforeachtable等,可以很方便地剔除数据库中的空白表。
方法一:使用SQLServer的[sysobjects]系统表格。数据库内创建的每个对象(约束、默认值、日志、规则、存储过程等)在[sysobjects]表中占一行,该系统表的字段包括:对象名name、对象类型xtype(U=用户表)等。利用游标的提取功能提取[sysobjects]表中的用户表名,然后对提取的用户表进行判断,如果用户表无记录,则删除该表,具体步骤如下:
第一步,打开SQLServer查询分析器,选择目标数据库。
第二步,定义参数:declare@tbnamevarchar(100)
第三步,定义游标,从数据库中取出用户表名:
Declarecur1cursorfor
selectnamefromsysobjectswherextype='u'
第四步,打开游标提取用户表名,对用户表进行判断,删除空白表:
Opencur1
Fetchnextfromcur1into@tbname
While@@fetch_status=0
Begin
Exec ('ifnotexists (select*from'+@tbname+')droptable '+@tbname)
Fetchnextfromcur1into@tbname
第五步,关闭并释放游标资源:
Closecur1
Deallocatecur1
方法二:使用SQL的系统存储过程sp_MSforeachtable实现上述目标。系统存储过程Sp_MSforeachtable可以用来对某个数据库的所有表或某个SQL服务器上的所有数据库进行管理,它包含7个参数:
@command1nvarchar(2000),——第一条运行的T-SQL指令
@replacecharnchar(1)=N'?',——指定的占位符号
@co mmand2nvarchar (2000)=null,——第二条运行的T-SQL指令
@command3nvarchar (2000)=null,——第三条运行的T-SQL指令
@whereandnvarchar(2000)=null,——可选条件来选择表
@precommandnvarchar(2000)=null,——在表前执行的指令
@postcommandnvarchar(2000)=null——在表后执行的指令
这里,主要使用参数@command1,具体步骤如下:
第一步,打开SQLServer查询分析器,选择目标数据库。
第二步,执行系统存储过程sp_MSforeachtable语句,删除空白表:
Execsp_msforeachtable@command1="ifnotexists (select*from?)droptable?"
其中,“?”类似于在WINDOWS中搜索文件时的通配符。
本文来源: https://www.lw33.cn/article/d9b7e11f24e47461cc9ea0a2.html