sp_MSforeachdb和sp_MSforeachtable的用法

系统存储过程sp_MSforeachtable和sp_MSforeachdb存放在SQL Server的MASTER数据库中。两个存储过程参数差不多,sp_MSforeachtable多了一个@whereand,其他参数含义一样。

参数说明:
@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, --执行所有SQL指令前的操作
@postcommand nvarchar(2000)= null --执行所有SQL指令后的操作

@replacechar占位符说明:
此处的占位符其实就相当于一个表名或库名,sp_MSforeachtable和sp_MSforeachdb会替我们选出来然后填充上

存储过程功能说明:
sp_MSforeachtable会获取所有满足@whereand条件的用户自建表,然后调用sp_MSforeach_worker对获取到的每个表执行SQL指令[如果@whereand为空,则会选出所有用户自建表]
-----------------------------------------------------------------------------------------
sp_MSforeachdb会获取所有满足@whereand条件的当前用户可访问的数据库(自己理解,建议自己看下存储过程),然后调用sp_MSforeach_worker对获取到的每个库执行SQL指令

一个简单的应用:
今天刚好有个项目要上线,有一项任务就是要清空表中的所有测试数据,用下面这条语句轻松搞定
sp_MSforeachtable @command1 = "TRUNCATE TABLE ?"
[这里默认会选出所有用户自建表]
省下了我们自己写游标的痛苦

总结:最好自己看下这3个存储过程,理解一下,才能应用好。其实这套存储过程就是一个游标,获取符合条件的表/库,然后针对这些表/库执行SQL指令
 

本文出自 “杨金澎” 博客,谢绝转载!

你可能感兴趣的:(sp_MSforeachdb)