查詢全庫所有表各表總記錄數-SQL Server版本
阿新 • • 發佈:2019-02-09
一、建立函式
USE tempdb GO IF OBJECT_ID ('dbo.PR_QUERY_TABLE_RECORD') IS NOT NULL DROP PROCEDURE dbo.PR_COUNT_TABLE_RECORD GO CREATE PROCEDURE PR_COUNT_TABLE_RECORD ( @dbname_prefix VARCHAR(300) --資料庫字首名 ) AS BEGIN DECLARE @tmpSql VARCHAR(900), @dbname VARCHAR(300), @tablename VARCHAR(300), @querysql VARCHAR(900) CREATE TABLE #tmp_all_table_record( dbname VARCHAR(300), tablename VARCHAR(300), rowcounts INT ) CREATE TABLE #tmp_tbs( tablename VARCHAR(300), querysql VARCHAR(900) ) --1.定義遊標(所有符合字首條件的庫名) DECLARE dbs CURSOR FOR SELECT name FROM master..sysdatabases WHERE name LIKE @dbname_prefix + '%' --2.開啟遊標 OPEN dbs --3.獲取記錄 FETCH dbs INTO @dbname --4.迴圈處理每個庫 WHILE @@FETCH_STATUS = 0 BEGIN --4.1 清空臨時表 TRUNCATE TABLE #tmp_tbs --4.2處理臨時表 SELECT @tmpSql = 'INSERT INTO #tmp_tbs SELECT name, ''INSERT INTO #tmp_all_table_record ' + ' SELECT ''''' + @dbname + ''''', '''''' + name + '''''', COUNT(*) FROM ' + @dbname + '..'' + name FROM ' + @dbname + '..sysobjects WHERE type = ''U'' ' print @tmpSql EXECUTE (@tmpSql) --4.2.1 定義表列表遊標 DECLARE tbs CURSOR FOR SELECT tablename, querysql FROM #tmp_tbs --4.2.2 開啟表列表遊標 OPEN tbs --4.2.3 獲取記錄 FETCH tbs INTO @tablename, @querysql --4.2.4處理每個表 WHILE @@FETCH_STATUS = 0 BEGIN --4.2.5執行指令碼 PRINT @querysql EXECUTE (@querysql) --4.2.6處理下一條 FETCH tbs INTO @tablename, @querysql END CLOSE tbs DEALLOCATE tbs --4.3 處理下一條 FETCH dbs INTO @dbname END --5.關閉遊標 CLOSE dbs --6.銷燬遊標 DEALLOCATE dbs SELECT dbname, tablename, rowcounts FROM #tmp_all_table_record ORDER BY rowcounts DESC DROP TABLE #tmp_tbs DROP TABLE #tmp_all_table_record END GO
二、執行函式
USE tempdb
GO
EXECUTE tempdb..PR_COUNT_TABLE_RECORD 'DB_TASK'
GO
三、檢視結果執行完畢後返回的結果集就是我們想要的結果。在需要時也可以修改儲存過程中的臨時表為實體表,根據需求調整即可