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)"