Instead of using DBCC CHECKDB , which checks on consistency and allocation across the whole database, an alternative is DBCC CHECKTABLE , which focuses on integrity checks on tables .
This query iterates through every table and returns the integrity check results.
The DBCC CHECKTABLE results are inserted to a #temp table.
Use the results as basis for action plan
The procedure is useful if confronted with a Recover from a Suspect database . Attempt to save the database for analysis
CREATE TABLE #tempResults (Error nvarchar(100), [Level] nvarchar(100), [State] nvarchar(100), [MsgTxt] nvarchar(100), [RepairLvl] nvarchar(100), [Status] nvarchar(100), [DbId] nvarchar(100), [ObjectID] nvarchar(100), [IndexId] nvarchar(100), [PartitionId] nvarchar(100), [AllocUnitId] nvarchar(100), [File] nvarchar(100), [Page] nvarchar(100), [Slot] nvarchar(100), [RefFile] nvarchar(100), [RefPage] nvarchar(100), [Ref Slot] nvarchar(100), [Alocation] nvarchar(100) ) DECLARE @tablename sysname DECLARE @username sysname DECLARE @cmd varchar(4000) DECLARE crs CURSOR FOR SELECT user_name(uid) , name FROM sysobjects WHERE type IN ('U','S') ORDER BY name OPEN crs FETCH NEXT FROM crs INTO @username, @tablename WHILE (@@fetch_status = 0) BEGIN PRINT convert(char(25),getdate()) + @username + '.' + @tablename SET @cmd = 'DBCC checktable ([' +@username + '.' + @tablename +']) WITH TABLERESULTS' INSERT INTO #tempResults EXEC (@cmd) FETCH NEXT FROM crs INTO @username, @tablename END PRINT 'FINISHED' CLOSE crs DEALLOCATE crs SELECT * FROM #tempResults DROP TABLE #tempResults
Author: Jack Vamvas (http://www.sqlserver-dba.com)