August 3, 2011

Script for archival of table in SQL Server

I wanted to write a T-SQL script for archival of large table.

CREATE PROCEDURE spArchiveTable
(
@TNAME NVARCHAR(100),
@CNAME NVARCHAR(100),
@FDATE DATETIME,
@TDATE DATETIME
)

AS

BEGIN

BEGIN TRY

DECLARE @SQL NVARCHAR(MAX)

DECLARE @ARCHTNAME NVARCHAR(200)

DECLARE @TOTALDATA INT

SET @FDATE = CONVERT(NVARCHAR(30),@FDATE,106) +' 00:00:00.000'

SET @TDATE = CONVERT(NVARCHAR(30),@TDATE,106) +' 23:59:59.900'

SET @SQL = 'SELECT @TOTALDATA = COUNT(*) FROM '+ @TNAME+' WHERE '+@CNAME+' BETWEEN '''+CAST(@FDATE AS VARCHAR(30))+''' AND '''+CAST(@TDATE AS VARCHAR(30))+''''

/* Find total available data for delation */

EXEC sp_executesql

@query = @SQL,

@params = N'@TOTALDATA INT OUTPUT',

@TOTALDATA = @TOTALDATA OUTPUT

/* Check if data is available then do rest of the things */

IF (@TOTALDATA > 0)

BEGIN

SET @ARCHTNAME = 'Archive_'+@TNAME+'_'+LEFT(CONVERT(NVARCHAR(30),@FDATE,106),2)+LEFT(DATENAME(mm, @FDATE),3)+RIGHT(DATENAME(yy, @FDATE),2)+'_To_'+LEFT(CONVERT(NVARCHAR(30),@TDATE,106),2)+LEFT(DATENAME(mm, @TDATE),3)+RIGHT(DATENAME(yy, @TDATE),2)+'_'+CAST(@TOTALDATA AS VARCHAR(20))

SET @SQL = 'SELECT * INTO '+@ARCHTNAME+' FROM '+@TNAME+' WHERE '+@CNAME+' BETWEEN '''+CAST(@FDATE AS VARCHAR(30))+''' AND '''+CAST(@TDATE AS VARCHAR(30))+''''

PRINT '/* Archive records in another table */'

PRINT @SQL

PRINT ''

EXEC(@SQL)

SET @SQL = 'DELETE FROM '+@TNAME+' WHERE '+@CNAME+' BETWEEN '''+CAST(@FDATE AS VARCHAR(30))+''' AND '''+CAST(@TDATE AS VARCHAR(30))+''''

PRINT '/* Delete records from table */'

PRINT @SQL

PRINT ''

EXEC(@SQL)

SET @SQL = 'ALTER INDEX ALL ON '+@TNAME+' REBUILD'

EXEC(@SQL)

PRINT '/* Now rebuild index of table */'

PRINT @SQL

PRINT ''

END

ELSE

BEGIN

PRINT 'There is no any data.'

END

END TRY

BEGIN CATCH

SELECT 'Error' AS 'Error' , ERROR_MESSAGE() AS 'Error Details'

END CATCH

END

EXEC spArchiveTable <TableName>,<ColName>,<FromDate>,<ToDate>

TableName: Pass table name
ColName:Here colname as date time on basis of this we will filter data.
FromDate:Start Date
ToDate: End date.

No comments:

Post a Comment