統計一個資料庫中,無記錄的表的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個;
第二個查詢結果,代表無記錄數的表的名稱的字元串,中間用分號分割。