Lynn Pettis (8/19/2015)
I could the see the problem from the git go:
DECLARE @TableName VARCHAR (50)
DECLARE @BatchSize int
DECLARE @ArchiveYear Date
DECLARE @RowCount int
SET @TableName = 'tblCall'
SET @BatchSize = (SELECT BatchSize FROM PrismDataArchive.dbo.ArchiveDriver WHERE TableName = 'tblCall')
SET @ArchiveYear = (SELECT ArchiveYear FROM PrismDataArchive.dbo.ArchiveDriver WHERE TableName = 'tblCall')
DECLARE @Call_Date Date
SET @Call_Date = (SELECT TOP 1 Call_date
FROM [PrismDataSource].[dbo].[tblCall] tc)
--SELECT * FROM PrismDataArchive.dbo.ArchiveDriver
--WHERE TableName = 'tblCall'
--SELECT @BatchSize, @TableName -- AND (SELECT Active_Indicator FROM PrismDataArchive.dbo.ArchiveDriver) = 1
--WHERE @BatchSize > 0
--SELECT * FROM PrismDataArchive.dbo.ArchiveDriver
DECLARE @Active_Indicator bit
/*
Your problem is here. You are selecting a constant null value (@Active_Indicator is undefined at this point).
SET @Active_Indicator =
(SELECT @Active_Indicator FROM PrismDataArchive.dbo.ArchiveDriver
WHERE Active_Indicator = 1 AND TableName = @TableName)
*/
-- Try this instead:
SELECT @Active_Indicator = Active_Indicator FROM PrismDataArchive.dbo.ArchiveDriver WHERE Active_Indicator = 1 AND TableName = @TableName;
WHILE @BatchSize > 0 AND @TableName = ('tblCall') AND @Active_Indicator = 1
--WHILE @BatchSize > 0 AND @TableName = ('tblCall') AND (SELECT Active_Indicator FROM PrismDataArchive.dbo.ArchiveDriver) = 1
BEGIN
BEGIN TRY
BEGIN TRANSACTION;
IF @Call_Date IS NULL
BEGIN
DELETE TOP (@BatchSize) FROM tc
OUTPUT DELETED.* INTO PrismDataArchive.dbo.tblCallArchive
FROM [PrismDataSource].[dbo].[tblCall] tc
WHERE tc.Call_Date IS NULL
END
ELSE
BEGIN
DELETE TOP (@BatchSize) FROM tc
OUTPUT DELETED.* INTO PrismDataArchive.dbo.tblCallArchive
FROM [PrismDataSource].[dbo].[tblCall] tc
WHERE tc.Call_Date >= DATEADD(yy, DATEDIFF(yy,0,@ArchiveYear), 0) --jan 1 of the year of the date param passed.
AND tc.Call_Date < DATEADD(yy,1,DATEADD(yy, DATEDIFF(yy,0,@ArchiveYear), 0)) --add one year:
END
SET @BatchSize = @@ROWCOUNT; -- capture number of rows affected
IF @BatchSize > 0
BEGIN
INSERT INTO ArchiveLog (TableName,ArchiveYear, BatchSize)
VALUES (@TableName,@ArchiveYear,@BatchSize)
END
--COMMIT TRANSACTION;
END TRY
BEGIN CATCH
--ROLLBACK TRANSACTION;
END CATCH
END
Even with that change, I'm not sure is this going to do what you think it is going to do. I haven't tried to decipher the logic in the code.
I did test it and I will perform additional testing going forward.
Thant you for the code you posted it was a great help.
For better, quicker answers on T-SQL questions, click on the following...
http://www.sqlservercentral.com/articles/Best+Practices/61537/
For better answers on performance questions, click on the following...
http://www.sqlservercentral.com/articles/SQLServerCentral/66909/