統計一個資料庫中,無記錄的表的sql語句

  • 2019 年 10 月 4 日
  • 筆記

SQL Server資料庫中統計無記錄數的表

大家使用的時候,將sql腳本中的紅色[TestDB] 換成你的目標資料庫名稱。

 1 /************************************************************   2  * Code formatted by SoftTree SQL Assistant ?v7.0.158   3  * Time: 2016/5/19 18:47:02   4  * Author:zhangcn   5  ************************************************************/   6   7 -- 指定一個資料庫名稱   8 USE [TestDB];   9  10 DECLARE @tableCount INT = 0;                        -- 定義變數,統計一個資料庫中有多少張表  11 DECLARE @rowCount INT = 0;                          -- 定義變數,記錄單個表中的記錄數  12 DECLARE @i INT = 1;                                 -- 定義變數, 用於循環計數  13 DECLARE @tableNamesWithoutData NVARCHAR(4000) = ''; -- 定義變數,用於記錄資料庫中哪些表沒有數據  14 DECLARE @tableNamesWithoutDataCount INT = 0;        -- 定義變數,統計資料庫中無無記錄表的數量  15 DECLARE @tableName NVARCHAR(2000) = '';             -- 定義變數,記錄單個表的名字(該表沒有記錄)  16 DECLARE @sql NVARCHAR(2000) = '';                   -- 定義sql,接收查詢語句  17  18 -- 統計指定的資料庫中有多少張表  19 SELECT @tableCount = COUNT([name])  20 FROM   sys.objects  -- 系統基礎對象所在的視圖  21 WHERE  [type] = 'U'  22  23 -- 判斷臨時表是否已經存在  24 IF OBJECT_ID('tempdb..#TempTable') IS NOT NULL  25 BEGIN  26     DROP TABLE #TempTable;-- 刪除臨時表  27 END  28  29 -- 將指定資料庫中的表名稱與排序號,裝入臨時表中(效率很高)  30 SELECT ROW_NUMBER() OVER(ORDER BY NAME) AS rowNumber, [name]  31     INTO #TempTable  32 FROM   sys.objects  33 WHERE  [type] = 'U'  34  35 WHILE @i <= @tableCount  36 BEGIN  37     -- 循環計算每個表的名稱  38     SELECT @tableName = [name]  39     FROM  #TempTable  40     WHERE rowNumber = @i;  41  42     -- 拼接sql語句,用於統計表中的記錄數  43     SET @sql = ' SELECT @num = COUNT(*) FROM [' + @tableName + ']';  44     EXEC sp_executesql @sql,N'@num int output',@rowCount OUTPUT  -- 執行查詢  45  46     -- select @rowCount  47  48     IF @rowCount = 0  49     BEGIN  50         SET @tableNamesWithoutDataCount = @tableNamesWithoutDataCount + 1; -- 無記錄表計數器 + 1  51         IF @tableNamesWithoutData = ''  52         BEGIN  53             SET @tableNamesWithoutData = @tableName  54         END  55         ELSE  56         BEGIN  57             SET @tableNamesWithoutData = @tableNamesWithoutData + '、' + @tableName  58         END  59     END  60  61     SET @i = @i + 1;     -- 計數加1  62     SET @rowCount = 0;   -- 設置為0,下次重新計算  63     SET @tableName = ''; -- 清空,下次重新計算  64     SET @sql = '';       -- 清空,下次重新計算  65 END  66  67 SELECT @tableNamesWithoutDataCount; -- 輸出無記錄表的總數量  68 SELECT @tableNamesWithoutData;      -- 輸出無記錄表的名稱

打開SQL 查詢分析器,將上述腳本拷貝後運行,結果如下:

第一個查詢結果,代表無記錄數的表的總數量為652個;

第二個查詢結果,代表無記錄數的表的名稱的字元串,中間用分號分割。