|
1)說明 系統(tǒng)存儲過程sp_MSforeachtable和sp_MSforeachdb,是微軟提供的兩個(gè)不公開的存儲過程,從ms sql 6.5開始。 存放在SQL Server的MASTER數(shù)據(jù)庫中。
2)參數(shù)說明: @command1 nvarchar(2000), --第一條運(yùn)行的SQL指令 @replacechar nchar(1) = N'?', --指定的占位符號 @command2 nvarchar(2000)= null, --第二條運(yùn)行的SQL指令 @command3 nvarchar(2000)= null, --第三條運(yùn)行的SQL指令 @whereand nvarchar(2000)= null, --可選條件來選擇表 @precommand nvarchar(2000)= null, --執(zhí)行指令前的操作(類似控件的觸發(fā)前的操作) @postcommand nvarchar(2000)= null --執(zhí)行指令后的操作(類似控件的觸發(fā)后的操作)
3)舉例 --統(tǒng)計(jì)數(shù)據(jù)庫里每個(gè)表的詳細(xì)情況 exec sp_MSforeachtable @command1="sp_spaceused '?'" --獲得每個(gè)表的記錄數(shù)和容量: EXEC sp_MSforeachtable @command1="print '?'", @command2="sp_spaceused '?'", @command3= "SELECT count(*) FROM ? " --獲得所有的數(shù)據(jù)庫的存儲空間: EXEC sp_MSforeachdb @command1="print '?'", @command2="sp_spaceused " --檢查所有的數(shù)據(jù)庫 EXEC sp_MSforeachdb @command1="print '?'", @command2="DBCC CHECKDB (?) " --更新PUBS數(shù)據(jù)庫中已t開頭的所有表的統(tǒng)計(jì): EXEC sp_MSforeachtable @whereand="and name like 't%'", @replacechar='*', @precommand="print 'Updating Statistics.....' print ''", @command1="print '*' update statistics * ", @postcommand= "print''print 'Complete Update Statistics!'" --刪除當(dāng)前數(shù)據(jù)庫所有表中的數(shù)據(jù) sp_MSforeachtable @command1='Delete from ?' sp_MSforeachtable @command1 = "TRUNCATE TABLE ?"
4)參數(shù)@whereand的用法 @whereand參數(shù)在存儲過程中起到指令條件限制的作用,具體的寫法如下: @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)"?"在存儲過程的特殊用法,造就了這兩個(gè)功能強(qiáng)大的存儲過程 這里"?"的作用,相當(dāng)于DOS命令中、以及我們在WINDOWS下搜索文件時(shí)的通配符的作用。
|