11. Sample SQL Loop for Validate data using EXCEPT between two large tables.
-- Declare Variables
DECLARE @nBaseRecID BIGINT = 1400000
DECLARE @MaxBaseRecID BIGINT = 6414743
DECLARE @GAP BIGINT = 10000
DECLARE @MESSAGE VARCHAR(250)
DECLARE @CurrentDateTime DATETIME = GETDATE()
SET XACT_ABORT ON
SET NOCOUNT ON -- Turn off row count messages
-- Table_A and Table_B has nBaseRecID column
WHILE @nBaseRecID < @MaxBaseRecID
BEGIN
SELECT * INTO #A FROM Table_A WHERE nBaseRecID BETWEEN @nBaseRecID AND @nBaseRecID + @GAP
SET @MESSAGE = (SELECT CONVERT(VARCHAR(23), GETDATE(), 121) + ' - Rows Affected: ' + CONVERT(VARCHAR, @@ROWCOUNT))
RAISERROR (@MESSAGE,0,1)WITH NOWAIT
SELECT * INTO #B FROM Table_B WHERE nBaseRecID BETWEEN @nBaseRecID AND @nBaseRecID + @GAP
SET @MESSAGE = (SELECT CONVERT(VARCHAR(23), GETDATE(), 121) + ' - Rows Affected: ' + CONVERT(VARCHAR, @@ROWCOUNT))
RAISERROR (@MESSAGE,0,1)WITH NOWAIT
SELECT * FROM #A
EXCEPT
SELECT * FROM #B
SET @MESSAGE = (SELECT CONVERT(VARCHAR(23), GETDATE(), 121) + ' - Rows Affected: ' + CONVERT(VARCHAR, @@ROWCOUNT))
RAISERROR (@MESSAGE,0,1)WITH NOWAIT
SELECT * FROM #B
EXCEPT
SELECT * FROM #A
SET @MESSAGE = (SELECT CONVERT(VARCHAR(23), GETDATE(), 121) + ' - Rows Affected: ' + CONVERT(VARCHAR, @@ROWCOUNT))
RAISERROR (@MESSAGE,0,1)WITH NOWAIT
SET @MESSAGE = (SELECT CONVERT(VARCHAR(23), GETDATE(), 121) + ' - Validation for : ' + CONVERT(VARCHAR, @nBaseRecID) +' And ' + CONVERT(VARCHAR, @nBaseRecID + @GAP))
RAISERROR ( @MESSAGE,0, 1)WITH NOWAIT
DROP TABLE #VIEW
DROP TABLE #TABLE
SET @nBaseRecID = @nBaseRecID + @GAP + 1
END
No comments:
Post a Comment