1. 程式人生 > >查詢全庫所有表各表總記錄數-SQL Server版本

查詢全庫所有表各表總記錄數-SQL Server版本

一、建立函式

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
三、檢視結果
執行完畢後返回的結果集就是我們想要的結果。在需要時也可以修改儲存過程中的臨時表為實體表,根據需求調整即可