Thursday, April 12, 2018

SQL Loop with EXCEPT

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