Once the procedure is created successfully, updates to the system catalog should be immediately disabled as follows:
1> sp_configure "allow updates", 0 2> go
sp_marksuspect database_name
1> sp_marksuspect PRODUCTION 2> go
Database 'PRODUCTION' has been marked suspect!
NOTE: You may now drop this database via dbcc dbrepair (dbname, dropdb).
CREATE PROC sp_marksuspect @dbname varchar(30) AS DECLARE @msg varchar(80) IF @@trancount > 0 BEGIN PRINT "Can't run sp_marksuspect from within a transaction." RETURN (1) END IF suser_id() != 1 BEGIN SELECT @msg = "You must be the System Administrator (SA) SELECT @msg = @msg + "to execute this procedure." PRINT @msg RETURN (1) END IF (SELECT COUNT(*) FROM master..sysdatabases WHERE name = @dbname) != 1 BEGIN SELECT @msg = "Database '" + @dbname + "' does not exist!" PRINT @msg RETURN (1) END IF (SELECT COUNT(*) FROM master..sysdatabases WHERE name = @dbname and status & 320 = 320) = 1 BEGIN SELECT @msg = "Database '" + @dbname + "' " SELECT @msg = @msg + "is already marked suspect." PRINT @msg RETURN (1) END BEGIN TRAN update master..sysdatabases set status = status|320 WHERE name = @dbname IF @@error != 0 or @@rowcount != 1 ROLLBACK TRAN ELSE BEGIN COMMIT TRAN SELECT @msg = "Database '" + @dbname + "' has been marked suspect!" PRINT @msg PRINT " " SELECT @msg = "NOTE: You may now drop this database" SELECT @msg = @msg + "via dbcc dbrepair (dbname, dropdb)." PRINT @msg PRINT " " END