We have a couple of servers with a large amount of databases on them so we want to run things such as DBCC statements on batches of databases at a time.I created the following script but my cursor doesn't seem to be working at all:USE DBAdminGO IF OBJECT_ID ( 'usp_MaintainDBs', 'P' ) IS NOT NULL DROP PROCEDURE usp_MaintainDBs;GOCREATE PROCEDURE usp_MaintainDBs @batchNo SMALLINTASDECLARE @dbId INTDECLARE @dbName VARCHAR(100)DECLARE @sql VARCHAR(1000)-- Check table to hold database list existsIF OBJECT_ID('dbo.DbsToMaintain', 'U') IS NULLBEGIN CREATE TABLE DbsToMaintain ( DatabaseID INT NOT NULL, DatabaseName VARCHAR(100) NOT NULL, LastDateMaintained SMALLDATETIME NULL )END-- Check if every database has been processed. If so, reset the date fields to NULLIF (SELECT COUNT(*) FROM DbsToMaintain WHERE LastDateMaintained IS NULL) = 0BEGIN UPDATE DbsToMaintain SET LastDateMaintained = NULLEND-- Get all of the databases to be included in the maintenance routine and check for newly created onesINSERT INTO DbsToMaintainSELECT sd.database_id, sd.name, NULL FROM sys.databases sdLEFT OUTER JOIN DbsToMaintain dtm ON dtm.databaseid = sd.database_idWHERE sd.database_id NOT IN (1, 2, 3, 4)AND dtm.DatabaseID IS NULLORDER BY database_id-- Remove any databases form the table that no longer reside on the serverDELETE FROM DbsToMaintainWHERE DatabaseID NOT IN (SELECT database_id FROM sys.databases)-- Create a cursor to loop through the databasesSET @sql = 'DECLARE db_Cursor CURSOR FOR' + ' SELECT TOP ' + CONVERT(VARCHAR, @batchNo) + ' DatabaseID, DatabaseName FROM DbsToMaintain WHERE LastDateMaintained IS NULL' + ' OPEN db_Cursor' + ' FETCH NEXT FROM db_Cursor INTO ' + CONVERT(VARCHAR, @dbId) + ', ' + @dbName + ' WHILE @@FETCH_STATUS = 0' + ' BEGIN' + ' UPDATE DbsToMaintain SET LastDateMaintained = GETDATE() WHERE DatabaseID = ' + CONVERT(VARCHAR, @dbId) + ' PRINT ' + @dbName + ' processed' + ' FETCH NEXT FROM db_Cursor INTO ' + CONVERT(VARCHAR, @dbId) + ', ' + @dbName + ' END' + ' CLOSE db_Cursor' + ' DEALLOCATE db_Cursor'EXEC(@sql)go
Is there anything obvious as to why this isn't working?Junior DBA learning the ropes