浅析sp_MSforeachtable和sp_MSforeachdb的用法


1. 概述

系统存储过程sp_MSforeachtablesp_MSforeachdb, 是微软提供的两个不公开的存储过程,ms sql 6.5 开始。

存放在SQL ServerMASTER 数据库中。

我们在master 数据库里执行下面的语句可以看到两个proc 详细的代码

 

use master

 

exec sp_helptext sp_MSforeachtable

 

exec sp_helptext sp_Msforeachdb

 

2.sp_MSforeachtable

 

2.1 sp_MSforeachtable 参数说明:

/*********************************************************************************

sp_MSforeachtable 系统存储过程有6 个参数:

@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  -- 执行指令后的操作( 类似控件的触发后的操作)

/*********************************************************************************

 

2.2 sp_MSforeachtable 使用举例

 

-- 统计数据库里每个表的详细情况

exec sp_MSforeachtable @command1="sp_spaceused '?'"


--把上面的结果存入表中 方便查看

create table test(name varchar(100), rows int,reserved varchar(100),data varchar(20),index_size varchar(20),unused varchar(20))

insert into test
EXEC   sp_MSforeachtable   " exec sp_spaceused   '?'"


-- 获得每个表的记录数和容量:

EXEC sp_MSforeachtable @command1="print '?'",

@command2="sp_spaceused '?'",

@command3= "SELECT count(*) FROM ? "

 

 

-- 更新PUBS 数据库中已t 开头的所有表的统计:

EXEC sp_MSforeachtable @whereand="and name like 't%'",

@replacechar='*',

@precommand="print 'Updating Statistics.....' print ''",

@command1="print '*' update statistics * ",

@postcommand= "print''print 'Complete Update Statistics!'"

 

-- 删除当前数据库所有表中的数据

sp_MSforeachtable @command1='Delete from ?'

sp_MSforeachtable @command1 = "TRUNCATE TABLE ?"

 

参数@whereand 的用法

@whereand 参数在存储过程中起到指令条件限制的作用, 具体的写法如下:

@whereend, 可以这么写 @whereand=' AND o.name in (''Table1'',''Table2'',.......)'

例如: 我想更新Table1/Table2/Table3NOTE 列为NULL 的值

sp_MSforeachtable @command1='Update ? Set NOTE='''' Where NOTE is NULL',@whereand=' AND o.name in


(''Table1'',''Table2'',''Table3'')'

 

 

3.sp_msforeachdb

 

3.1 sp_msforeachdb 参数说明:

/*********************************************************************************

 sp_MSforeachdb 系统存储过程有6 个参数:

    @command1 nvarchar(2000) -- 第一条运行的t-sql 指令

    @replacechar nchar(1) = N'?' -- 指定的占位符号

    @command2 nvarchar(2000) = null -- 第二条运行的t-sql 指令

    @command3 nvarchar(2000) = null  -- 第三条运行的t-sql 指令

    @precommand nvarchar(2000) = null  -- sp_MSforeach_worker 前执行的指令

    @postcommand nvarchar(2000) = null -- sp_MSforeach_worker 后执行的指令

************************************************************************************/

 

3.2 sp_msforeachdb 用法举例

sp_msforeachdb 除了@whereand,sp_msforeachtable 的参数是一样的, 我们可以通过这个存储过程检测所有的数据库

 

-- 获得所有的数据库的存储空间:

exec sp_msforeachdb @command1="print '?'",

@command2="sp_spaceused "

 

-- 检查所有的数据库

exec sp_msforeachdb @command1="print '?'",

@command2="dbcc checkdb (?) "

 

4. "?" 说明

"?" 在存储过程的特殊用法, 造就了这两个功能强大的存储过程

这里"?" 的作用, 相当于DOS 命令中、以及我们在WINDOWS 下搜索文件时的通配符的作用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值