Quantcast
Channel: Forum SQL Server Database Engine
Viewing all articles
Browse latest Browse all 15889

stored procedure for rebuild indexes

$
0
0

hi all

  this is my rebuild index query, i schedule it in sql server agent (jobs),but it getting failed 

my stored procedure here :

USE [databasename]
GO

StoredProcedure [dbo].[sp_RebuildIndexes]   
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[sp_RebuildIndexes]
@ReIndexMe VARCHAR(500) = NULL --Supply a DATABASE name, IF NOT the value will DEFAULT TO NULL
AS
DECLARE @DBName VARCHAR(500), @SQLState VARCHAR(5000) --Primary Variables 

IF @ReIndexMe IS NOT NULL --If the DatabaseName is supplied reindex ONLY that database
	BEGIN
		SET @DBName = @ReIndexMe
		SET @SQLState = '
		DECLARE TableCursor CURSOR FOR SELECT ''' + @DBName + '.'' + TABLE_SCHEMA + ''.'' + table_name FROM [' + @DBName + '].information_schema.tables WHERE table_type = ''base table''
		DECLARE @TableName varchar(255)
		OPEN TableCursor
		FETCH NEXT FROM TableCursor INTO @TableName
		WHILE @@FETCH_STATUS = 0
		BEGIN 
		SELECT ''Reindexing '' + @TableName AS DOING
		DBCC DBREINDEX(@TableName,'' '',90)
		FETCH NEXT FROM TableCursor INTO @TableName
		END
		CLOSE TableCursor
		DEALLOCATE TableCursor'
		EXEC (@SQLSTate)
	END
ELSE	--If the DatabaseName IS NOT supplied Reindex ALL Databases on server
	BEGIN
		DECLARE DBCursor CURSOR FOR SELECT name FROM master.dbo.sysdatabases --Get ALL Database Names AND LOAD INTO Cursor. 
			--Also IF you do NOT wish TO reindex the Master, model AND msdb databases or ANY others ADD a WHERE name not in (list OF databases) to prevent
		OPEN DBCursor
		FETCH NEXT FROM DBCursor INTO @DBName
		WHILE @@FETCH_STATUS = 0
		BEGIN
		SET @SQLState = '
		DECLARE TableCursor CURSOR FOR SELECT ''' + @DBName + '.'' + TABLE_SCHEMA + ''.'' + table_name FROM [' + @DBName + '].information_schema.tables WHERE table_type = ''base table''
		DECLARE @TableName varchar(255)
		OPEN TableCursor
		FETCH NEXT FROM TableCursor INTO @TableName
		WHILE @@FETCH_STATUS = 0
		BEGIN 
		SELECT ''Reindexing '' + @TableName AS DOING
		DBCC DBREINDEX(@TableName,'' '',90)
		FETCH NEXT FROM TableCursor INTO @TableName
		END
		CLOSE TableCursor
		DEALLOCATE TableCursor'
		EXEC (@SQLSTate)
		FETCH NEXT FROM DBCursor INTO @DBName
		END
		CLOSE DBCursor
		DEALLOCATE DBCursor
	END


GO

its giving error like "Cannot find a table or object with the name "tempdb.dbo.#0519C6AF". Check the system catalog."

please help me out.


Viewing all articles
Browse latest Browse all 15889

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>