DECLARE @NAME VARCHAR(50), @SQL VARCHAR(MAX);
SET @SQL = '
DECLARE @RESULT_TABLE TABLE ([TableName] VARCHAR(32), [RowCount] INT);
DECLARE @TEMP_COUNT INT;';
DECLARE TB_CURSOR CURSOR FOR
SELECT TABLE_NAME = CONVERT(SYSNAME, o.name)
FROM sys.all_objects o
WHERE o.type = 'U'
AND HAS_PERMS_BY_NAME(QUOTENAME(SCHEMA_NAME(o.schema_id)) + '.' + QUOTENAME(o.name), 'OBJECT', 'SELECT') = 1;
OPEN TB_CURSOR;
FETCH NEXT FROM TB_CURSOR INTO @NAME;
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = @SQL + CHAR(10) + 'INSERT INTO @RESULT_TABLE SELECT ''' + @NAME + ''', COUNT(1) FROM ' + @NAME + ';';
FETCH NEXT FROM TB_CURSOR INTO @NAME;
END
CLOSE TB_CURSOR; DEALLOCATE TB_CURSOR;
SET @SQL = @SQL + CHAR(10) + 'SELECT * FROM @RESULT_TABLE';
EXEC (@SQL);
DECLARE @RESULT_TABLE TABLE ([TableName] VARCHAR(32), [RowCount] INT);
DECLARE @TEMP_COUNT INT;
INSERT INTO @RESULT_TABLE SELECT 'LDMMessage', COUNT(1) FROM LDMMessage;
INSERT INTO @RESULT_TABLE SELECT 'DCSFile', COUNT(1) FROM DCSFile;
INSERT INTO @RESULT_TABLE SELECT 'SSRCode', COUNT(1) FROM SSRCode;
...
SELECT * FROM @RESULT_TABLE;
HAS_PERMS_BY_NAME 過濾無 SELECT 權限的表,避免動態 SQL 執行報錯。sys.all_objects 篩選 type = 'U'。COUNT(*) 觸發掃描,大表耗時久。作者:Lance Zhang | 出處:https://blodfox777.cnblogs.com/ | 版權歸作者與博客園共有。