Files
WebGIM/Projects/Backup&Optim/Crea_sp_IndiciAndShrink.sql
T

57 lines
1.3 KiB
Transact-SQL

USE [master]
GO
/****** Object: StoredProcedure [dbo].[sp_indiciAndShrink] Script Date: 03/11/2009 17:06:47 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Marco Salvi
-- Create date: 11/03/2009
-- Description: Stored procedure per ricostruire gli indici e fare lo shrink su un db
-- =============================================
CREATE PROCEDURE [dbo].[sp_indiciAndShrink]
(
@databaseName sysname
)
AS
BEGIN
exec('USE ' + @databaseName)
-- elimino eventuale tab temporanea preesistente
IF (SELECT COUNT(*) FROM TEMPDB..SYSOBJECTS WHERE NAME = '##TMP_nomiTabelle') > 0
BEGIN
DROP TABLE ##TMP_nomiTabelle
END
-- enumero le tab del db in una tab temporanea
SELECT IDENT = IDENTITY (INT,1,1), name
INTO ##TMP_nomiTabelle
FROM sys.Tables
-- eseguo reindicizzazione
DECLARE @VAR1 INT
SET @VAR1 = 1
WHILE @VAR1 < = ( SELECT COUNT(*) FROM ##TMP_nomiTabelle)
BEGIN
DECLARE @OBJECTNAME VARCHAR(256)
-- carico il nome della tab i-esima
SELECT @OBJECTNAME = name
FROM ##TMP_nomiTabelle
WHERE [IDENT] = @VAR1
-- rebuild indice
DBCC DBREINDEX(@OBJECTNAME)
-- incremento
SET @VAR1 = @VAR1 + 1
END
--shrink del db
DBCC SHRINKDATABASE (@databaseName)
END