EXEC sp_MSforeachtable "EXECUTE sp_spaceused '?'"
mssql裡sp_MSforeachtable和sp_MSforeachdb的用法
從mssql6.5開始,微軟提供了兩個不公開,非常有用的系統存儲過程sp_MSforeachtable和sp_MSforeachdb,用於遍歷某個數據庫的每個表和遍歷DBMS管理下的每個數據庫。
mssql裡sp_MSforeachtable和sp_MSforeachdb的用法
我們在master數據庫裡執行下面的語句可以看到兩個proc詳細的代碼
use master
exec sp_helptext sp_MSforeachtable
exec sp_helptext sp_Msforeachdb
sp_MSforeachtable系統存儲過程有7個參數,解釋如下:
@command1 nvarchar(2000), --第一條運行的T-SQL指令
@replacechar nchar(1) = N'?', --指定的占位符號
@command2 nvarchar(2000)= null,--第二條運行的T-SQL指令
@command3 nvarchar(2000)= null, --第三條運行的T-SQL指令
@whereand nvarchar(2000)= null, --可選條件來選擇表
@precommand nvarchar(2000)= null, --在表前執行的指令
@postcommand nvarchar(2000)= null --在表後執行的指令
mssql裡sp_MSforeachtable和sp_MSforeachdb的用法
--sp_MSforeachdb除了@whereand外,和sp_MSforeachtable的參數是一樣的。
--我們來看看sp_MSforeachtable的用法(sp_MSforeachdb的用法類似):
--統計數據庫裡每個表的詳細情況:
exec sp_MSforeachtable @command1="sp_spaceused '?'"
--查詢數據庫所有表的記錄總數
CREATE TABLE #temp (TableName VARCHAR (255), RowCnt INT)
EXEC sp_MSforeachtable 'INSERT INTO #temp SELECT ''?'', COUNT(*) FROM ?'
SELECT TableName, RowCnt FROM #temp ORDER BY TableName
DROP TABLE #temp
--檢查數據庫裡每個表或索引視圖的數據、索引及text、ntext 和image 頁的完整性
--下列語句需在單用戶模式下執行(sp_dboption 'db_name', 'single user', 'true'),將true改成false就又變成多用戶了
exec sp_msforeachtable "dbcc checktable('?',repair_rebuild)";
sql查詢所有用戶表的列表,詳細信息,如:記錄數,表占用大小等
EXEC sp_MSforeachtable "EXECUTE sp_spaceused '?'"
mssql裡sp_MSforeachtable和sp_MSforeachdb的用法
從mssql6.5開始,微軟提供了兩個不公開,非常有用的系統存儲過程sp_MSforeachtable和sp_MSforeachdb,用於遍歷某個數據庫的每個表和遍歷DBMS管理下的每個數據庫。
mssql裡sp_MSforeachtable和sp_MSforeachdb的用法
我們在master數據庫裡執行下面的語句可以看到兩個proc詳細的代碼
use master
exec sp_helptext sp_MSforeachtable
exec sp_helptext sp_Msforeachdb
sp_MSforeachtable系統存儲過程有7個參數,解釋如下:
@command1 nvarchar(2000), --第一條運行的T-SQL指令
@replacechar nchar(1) = N'?', --指定的占位符號
@command2 nvarchar(2000)= null,--第二條運行的T-SQL指令
@command3 nvarchar(2000)= null, --第三條運行的T-SQL指令
@whereand nvarchar(2000)= null, --可選條件來選擇表
@precommand nvarchar(2000)= null, --在表前執行的指令
@postcommand nvarchar(2000)= null --在表後執行的指令
mssql裡sp_MSforeachtable和sp_MSforeachdb的用法
--sp_MSforeachdb除了@whereand外,和sp_MSforeachtable的參數是一樣的。
--我們來看看sp_MSforeachtable的用法(sp_MSforeachdb的用法類似):
--統計數據庫裡每個表的詳細情況:
exec sp_MSforeachtable @command1="sp_spaceused '?'"
--查詢數據庫所有表的記錄總數
CREATE TABLE #temp (TableName VARCHAR (255), RowCnt INT)
EXEC sp_MSforeachtable 'INSERT INTO #temp SELECT ''?'', COUNT(*) FROM ?'
SELECT TableName, RowCnt FROM #temp ORDER BY TableName
DROP TABLE #temp
--檢查數據庫裡每個表或索引視圖的數據、索引及text、ntext 和image 頁的完整性
--下列語句需在單用戶模式下執行(sp_dboption 'db_name', 'single user', 'true'),將true改成false就又變成多用戶了
exec sp_msforeachtable "dbcc checktable('?',repair_rebuild)"