数据库的两个 存储过程 : sp_MSforeachtable / sp_MSforeachdb 的参数说明及使用方法是本文我们主要要介绍的内容,接下来就让我们来一起了解一下这部分内容吧。
1.简介:
作为DBA会经常需要检查所有的数据库或用户表,比如:检查所有数据库的容量;看看指定数据库所有用户表的容量,所有表的记录数…,我们一般处理这样的问题都是用游标分别处理处理,比如:在数据库检索效率非常慢时,我们想检查数据库所有的用户表,我们就必须通过写游标来达到要求;如果我们用sp_MSforeachtable就可以非常方便的达到相同的目的:EXEC sp_MSforeachtable @command1=”print ‘?’ DBCC CHECKTABLE (‘?’)”系统存储过程sp_MSforeachtable和sp_MSforeachdb,是微软提供的两个不公开的存储过程,从msSQL6.5开始。存放在SQL Server的MASTER数据库中。可以用来对某个数据库的所有表或某个SQL 服务器 上的所有数据库进行管理,后面将对此进行详细介绍。
2.参数说明: @command1 nvarchar(2000), –第一条运行的SQL指令@replacechar nchar(1) = N’?’,–指定的占位符号@command2 nvarchar(2000)= null, –第二条运行的SQL指令@command3 nvarchar(2000)= null, –第三条运行的SQL指令@whereand nvarchar(2000)= null, –可选条件来选择表@precommand nvarchar(2000)= null, –执行指令前的操作(类似控件的触发前的操作)@postcommand nvarchar(2000)= null –执行指令后的操作(类似控件的触发后的操作)
以后为sp_MSforeachtable的参数,sp_MSforeachdb不包括参数@whereand
3.使用举例:
–统计数据库里每个表的详细情况:exec sp_MSforeachtable @command1=”sp_spaceused ‘?'”
–获得每个表的记录数和容量:

–获得所有的数据库的存储空间:
–检查所有的数据库
–更新PUBS数据库中已t开头的所有表的统计:
–删除当前数据库所有表中的数据
4.参数@whereand的用法:
@whereand参数在存储过程中起到指令条件限制的作用,具体的写法如下:@whereend,可以这么写 @whereand=’ AND o.name in (”Table1”,”Table2”,…….)’例如:我想更新Table1/Table2/Table3中NOTE列为NULL的值sp_MSforeachtable @command1=’Update ? Set NOTE=”” Where NOTE is NULL’,@whereand=’ AND o.name in (”Table1”,”Table2”,”Table3”)’
5.”?”在存储过程的特殊用法,造就了这两个功能强大的存储过程.
这里”?”的作用,相当于DOS命令中、以及我们在WINDOWS下搜索文件时的通配符的作用。
6.小结
有了上面的分析,我们可以建立自己的sp_MSforeachObject:(转贴)
这样我们来测试一下:–获得所有的存储过程的脚本:
–获得所有的视图的脚本:
–比如在开发过程中,没一个用户都是自己的OBJECT OWNER,所以在真实的数据库时都要改为DBO:
这样就非常方便的将每一个数据库对象改为DBO。
关于SQL Server数据库的两个存储过程:sp_MSforeachtable/sp_MSforeachdb的知识就介绍到这里了,希望本次的介绍能够对您有所收获!
【编辑推荐】
OracLE的存储过程都用在什么地方?最好能举几个工作中的例子
存储过程最多的用于C/S两层架构模式下,用于在后台处理业务逻辑和数据。 前台开发工具例如PowerBuilder可以实现界面展示和操作流程,涉及到后台某个集中处理数据、或者大批量数据的业务逻辑,就在Oracle后台存储过程里面来实现了。 卸载存储过程里面的东西,往往是不需要交互的一段处理过程,例如前台界面是“结算”业务,输入了结算时间段和结算单位以及相关的控制参数例如结算方法等,把这些参数传给后台存储过程,后台存储过程里面可以编制相关的结算处理程序,根据输入的单位、时间、方法类型等参数,来进行集中处理,这个过程是不需要与前台进行交互的,这里可以处理很复杂的业务,例如结算会涉及到多个表如单位基本信息表、单位结算信息表、明细表等等,可以在存储过程里面集中实现处理,然后把结果返回给前台,前台根据处理结果是否成功,决定是否进行提交(COMMIT)操作。
数据库系统存储过程sp_rename ,sp_helptext 的功能各是什么吗?
sp_rename:更改当前数据库中用户创建对象(如表、视图、列、存储过程、触发器、默认值、数据库、对象或规则或用户定义数据类型)的名称sp_helptext 在多个行中显示用来创建对象的文本PS大玮,给我分吧...
函数和存储过程的区别?
函数和存储过程对SQLSERVER来说有很大的区别:1.在SQLSERVER2K以前,没有自定义函数UDF,只有系统函数。 2.无论系统函数和UDF,在系统启动是就进行编译并加载,所以UDF的效率比SP要高,SP只是在调用时才加载(扩展的存储过程除外)。 3.有些函数getdate,exec..都在UDF里不能用!4.函数必须有返回值,SP则不一定。 5.函数可以包括在FROM子句中,SP则不可以。 6.在SQLSERVE2K中SP可以DEBUG,UDF不可以。
用户定义函数函数是由一个或多个Transact-SQL语句组成的子程序,可用于封装代码以便重新使用。 Microsoft®SQLServer™2000并不将用户限制在定义为Transact-SQL语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。 可使用CREATEFUNCTION语句创建、使用ALTERFUNCTION语句修改、以及使用DROPFUNCTION语句除去用户定义函数。 每个完全合法的用户定义函数名(database___name)必须唯一。 必须被授予CREATEFUNCTION权限才能创建、修改或除去用户定义函数。 不是所有者的用户在Transact-SQL语句中使用某个函数之前,必须先给此用户授予该函数的适当权限。 若要创建或更改在CHECK约束、DEFAULT子句或计算列定义中引用用户定义函数的表,还必须具有函数的REFERENCES权限。 在函数中,区别处理导致删除语句并且继续在诸如触发器或存储过程等模式中的下一语句的Transact-SQL错误。 在函数中,上述错误会导致停止执行函数。 接下来该操作导致停止唤醒调用该函数的语句。 用户定义函数的类型SQLServer2000支持三种用户定义函数:标量函数内嵌表值函数多语句表值函数存储过程存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。 存储过程是SQL语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。 存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。 存储过程可包含程序流、逻辑以及对数据库的查询。 它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。 可以出于任何使用SQL语句的目的来使用存储过程,它具有以下优点:可以在单个存储过程中执行一系列SQL语句。 可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。 存储过程在创建时即在服务器上进行编译,所以执行起来比单个SQL语句快。
存储过程可能单独完成一些内容,可以单独进行。 函数可以在试子中调用,比如可以进行一些计算等,不能单独执行。
发表评论