惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
Jina AI
Jina AI
博客园_首页
J
Java Code Geeks
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 司徒正美
Hugging Face - Blog
Hugging Face - Blog
S
SegmentFault 最新的问题
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
L
Lohrmann on Cybersecurity
Forbes - Security
Forbes - Security
大猫的无限游戏
大猫的无限游戏
Vercel News
Vercel News
Y
Y Combinator Blog
Google DeepMind News
Google DeepMind News
The Register - Security
The Register - Security
N
News | PayPal Newsroom
S
Security Archives - TechRepublic
量子位
Cisco Talos Blog
Cisco Talos Blog
V
V2EX
C
Cisco Blogs
The Cloudflare Blog
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
Scott Helme
Scott Helme
S
Securelist
Security Latest
Security Latest
爱范儿
爱范儿
TaoSecurity Blog
TaoSecurity Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
I
Intezer
L
LINUX DO - 最新话题
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
C
Check Point Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
美团技术团队
Know Your Adversary
Know Your Adversary
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
PCI Perspectives
PCI Perspectives
月光博客
月光博客
T
Tailwind CSS Blog
Cloudbric
Cloudbric
小众软件
小众软件
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
K
Kaspersky official blog
D
DataBreaches.Net
博客园 - 【当耐特】
有赞技术团队
有赞技术团队

博客园 - 电机拖动

我晕,DELL邮寄WIN7升级光盘的服务是不是太过分了? 史记.饭岛爱列传(转) [翻译]JavaScript性能测试 新手可以借助Profiler学习TSQL 如果《24》在94年播出的话…… 两个当年的MS广告(暴笑) 重新回归 [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之四十九:使用SqlDataSource插入、更新以及删除数据 [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之四十八:在SqlDataSource中使用参数化查询 - 电机拖动 [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之四十七:使用SqlDataSource控件查询数据 [翻译]Scott Mitchell的ASP.NET2.0数据教程中文版索引(Canceled!!) Evanescence - Origin [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十五:在GridView的页脚中显示统计信息 [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十四:使用FormView 的模板 [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十三:在DetailsView控件中使用TemplateField [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之十二:在GridView控件中使用TemplateField [翻译]Scott Mitchell 的ASP.NET 2.0数据教程之二:创建一个业务逻辑层 [SQLServer2000]TEMPDB丢失或TEMPDB文件损坏的服务器恢复 白话设计模式——FactoryMethod
SQL Server中的两个有用的存储过程
电机拖动 · 2008-03-19 · via 博客园 - 电机拖动

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

我这次要说的就是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,以后继续努力了。