master 資料庫內建 sp_MSForEachDB、sp_MSForEachTable,**對每個資料庫/資料表迴圈執行命令**,適合批次管理、巡檢、統計。
@command1、@command2、@command3:依序執行的 3 條命令。@replacechar:替換預設佔位符 ? (資料庫名)。@precommand:迴圈前執行。@postcommand:迴圈後執行。每命令集作為一個批次在目標資料庫內執行。**輸出導向文字模式 (Ctrl+T) 適合導出報表。**
EXEC sp_MSForEachDB @command1 = 'USE ? EXEC sp_spaceused';
輸出:每個資料庫名、大小、未配置空間、資料/索引/未使用空間明細。
@whereand:WHERE 條件或 ORDER BY 子句,篩選/排序目標表。EXEC sp_MSForEachTable
@command1 = 'PRINT ''?''',
@command2 = 'SELECT COUNT(*) FROM ?',
@whereand = 'ORDER BY 1';
輸出:
[HumanResources].[Department] 16
[HumanResources].[Employee] 290
... (含 Schema 名稱,完整識別)。
EXEC sp_MSForEachTable
@command1 = 'PRINT ''?''',
@command2 = 'SELECT COUNT(*) FROM ?',
@whereand = "AND schema_name(schema_id) = 'Sales'";
? 直接置換,**確保資料庫/表名無惡意字元**。sys.databases / sys.tables + 游標/動態 SQL 組裝,**完全可控、有文件支援**。sp_MSForEach* 是 DBA **臨時巡檢、一次性腳本** 的神兵利器,**認知其存在、掌握用法、敬畏其風險**。