荒废了多日的博客,有必要放点东西了。由于自己才疏学浅,实不知要写些什么才算上得档次,所以,现在打算想起什么就写什么……有的虽然是老生常谈,不过还是会加上我自己的一些见解的。

我这次要说的就是SQL Server中的sp_MSforeachtablesp_MSforeachdb。这两个存储过程在Books Online中没有(实际上,联机丛书中没有的东西多了去了,只是比Oracle好些罢了,毕竟Oracle啥都没有,文档可以看到人发癫),我们平时可能用不上它们,不过有的时候就能帮我们大忙了。

 

首先,看看sp_MSforeachtablesp_MSforeachdb跟它差不多)。它是用来遍历某个数据库中的表的,共支持以下7个参数:

@command1:要执行的第一个命令
@replacechar:占位符,默认值为问号(?)
@command2:要执行的第二个命令
@command3:要执行的第三个命令
@whereandWhere条件 Order By字句(不要“以貌取人”也差不多就是这个意思了)
@precommand 执行整个循环之前所要执行的命令(只执行一次)
@postcommand:执行整个循环之后所要执行的命令(只执行一次

其中,只有第一个参数是必须的,其余都是选填的。

看几个例子

1.       基本型

1 sp_MSforeachtable 
2    @command1 = 'SELECT COUNT(*) AS ''?'' FROM ?'

这个例子很简单,就是对当前数据库的每个表计数。实际上你可以做点实际的,比如DBCC之类的(特别是数据库优化的时候,非常有用,当然,2005中还有别的办法,这个以后再说)。

运行结果如下所示:



2.       占位符型

1 sp_MSforeachtable 
2    @command1 = 'SELECT COUNT(*)AS ''#'' FROM #'
3    @replacechar = '#'

当你的语句中需要用到默认的问号,或者你不喜欢问号时,就可以换个别的(这好像用处不是很大)。

运行结果跟上面的一样,就不多说了

3.       多语句型

1 sp_MSforeachtable 
2    @command1 = 'PRINT ''?'''
3    @command2 = 'SELECT COUNT(*) FROM ?'

当你需要对各个表执行多个操作时,就可以用这个了。

不过,这里的运行结果比较无聊。但是,你可以将输出设置为文本型的,这样就有用了,比如在写什么报告的时候就很方便。

看看文本形式的运行结果。



这样,就可以直接复制到你的报告中去了。当然也可以直接输出为文本文件,看你的需要吧。此外,还可以直接输出为
Excel文件,不过需要稍微做些手脚,这里就不多说了,以后再谈。

4.       筛选与排序

1 sp_MSforeachtable 
2    @command1 = 'PRINT ''?'''
3    @command2 = 'SELECT COUNT(*) FROM ?'
4    @whereand = 'ORDER BY 1'

@whereand参数,从名字上来看是Where子句,实际上也是可以放Order By的。当然,你也可以依此类推,在这里放置任何在语法上位于Where子句后面的字句都是可以的。我们用了ORDER BY 1,个人感觉不是很好的习惯,不过在这里倒是很方便实用的,在实际的编程中,建议最好别这样用。

看看运行结果,各表按名称排序了。

 

5.       开始与结束

刚才已经说了,如果是为了某个报告的话,可以加写点缀。那么你还可以加点其他的东西来润色一下。比如这样:

1 sp_MSforeachtable 
2    @command1 = 'PRINT ''?'''
3    @command2 = 'SELECT COUNT(*) FROM ?'
4    @whereand = 'ORDER BY 1'
5    @precommand = 'PRINT ''START ON '' + CAST(GETDATE() AS VARCHAR)'
6    @postcommand = 'PRINT ''Game Over!'''

看看运行结果



这样,放到报告中,似乎就好看多了。

 

本来打算再说说sp_MSforeachdb的,不过这个存储过程跟sp_MSforeachtable差不多,只是它针对的是数据库罢了,而且大家平时估计也就是操作一个数据库而已,所以就简单说说就是了。参数少了一个,即没有了@whereand

 

好了,这么多年以来,终于第一次写了一个看上去还行的Blog,以后继续努力了。

 

posted on 2008-03-19 16:33  电机拖动  阅读(1035)  评论(3编辑  收藏  举报