The next step is still the slowest. The SP above will identify 37044 accounts out of a total of 97000 accounts that "qualify" for archiving. So now I need to work a stored procedure complete with Selects, Inserts and Deletes to actually clear the tables of 37044 accounts and their individual records ( estimated at around 12-20 million of them total ).
Note: the time signatures are for testing only and won't be in the "Live" version. The commented parts indicate the original approach was 1 account at a time. I am trying to utilize the value of a Clustered Index by trying to process more than one account at a time ( first try 1000 ) but any amount can be used.
if exists (select * from dbo.sysobjects where id = object_id(N'[IMSV7].[ARCHIVEACCT]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [IMSV7].[ARCHIVEACCT]
GO
/* PROCEDURE: ARCHIVEACCT */
/* This is called from the Archive Utility for Billing. */
/* PURPOSE: This procedure archives transactions, bills, line items, payments */
/* and service charges for the account. */
/* PARAMETERS: dwAcctKey NUMBER = The account to archive */
/* tsArchiveDate DATE = The user-specified "Archive Prior To" date. */
-- NOTE THIS HAS BEEN MODIFIED TO RUN ARCHIVE FOR BEXAR ON JERRYSQLSERVER!!!!!
CREATE procedure IMSV7.ARCHIVEACCT ( @dwAcctKey NUMERIC, @tsDueDate DATETIME, @dwStartChunk int, @dwCurrChunk int )
AS
BEGIN
/* */
/* ARCHIVE THE ACTIVE RECORDS */
/* */
Declare @seq int, @theDate datetime
Set @seq = (Select (Case When Max(Seq) IS NULL Then 1 Else Max(Seq) + 1 END) From imsv7.ArchiveTracking)
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'Begin', @seq, @theDate)
-- Setup temp table to hold the acctkeys, duedates to process
DECLARE @tmp TABLE (AcctKey int, DueDate datetime)
Insert Into @tmp (AcctKey, DueDate)
SELECT AcctKey, DueDate
FROM IMSV7.ARCHIVEACCTS
WHERE ArchID BETWEEN @dwStartChunk AND @dwCurrChunk
/* Copy BILLS to the archive table */
/* Stage 2 through 8 process keys have been left out */
/* MESSAGES column is excluded - lvarchar columns may not be copied */
INSERT INTO ARCHBL
(BLKEY, ACCTKEY, BLNO, BLSTGKEY, BLTYPEKEY, ADDBY, ADDDTTM,
ADDR1, ADDR2, ADJAMT, BILLAMT, BLDATE, BLPERFRDT, BLPERTODT, BLTO,
CAREOFKEY, CITY, COUNTRY, CREDFLAG, CURRAMT, DEPAMT, DIRDBKEY,
DLNQAMT, DLNQDATE, DUEDATE, EVENTID, EXCLFLAG, FINALFLAG, INCPREVACT,
INTAMT, MODBY, MODDTTM, NOBILL, OVERAMT, PAIDDTTM, PAIDSTAT, PAYABLETO,
PAYORDER, PENAMT, PENEXEMPT, PRNCPLTOT, PROPADDR, STATE, ZIP, ARNGPAYAMT,
DISPAMT, VARIAMT, ARNGAMT, LIENAMT, COLLAMT, DEPDUEAMT, PENDFLAG, PENDTYPE,
DAYSRDS, PENFLAG, POSITION, AGGRBLKEY, INSTBLKEY, ACTAMT, BANKRPTKEY, COLLKEY, LIENKEY,
ACTUALAMT, ACTUALUSG, AGGRSTGKEY, BGTBLUSG, BILLADJAMT,
CUMVARIAMT, DISCEXPAMT, DISCEXPDT, INSTNO,
INSTTOTAMT, SETLAMT, STG2PRCKEY, STG3PRCKEY, STG4PRCKEY, STG5PRCKEY,
STG6PRCKEY, STG7PRCKEY, STG8PRCKEY)
SELECT
BLKEY, C.ACCTKEY, BLNO, BLSTGKEY, BLTYPEKEY, ADDBY, ADDDTTM,
ADDR1, ADDR2, ADJAMT, BILLAMT, BLDATE, BLPERFRDT, BLPERTODT, BLTO,
CAREOFKEY, CITY, COUNTRY, CREDFLAG, CURRAMT, DEPAMT, DIRDBKEY,
DLNQAMT, DLNQDATE, C.DUEDATE, EVENTID, EXCLFLAG, FINALFLAG, INCPREVACT,
INTAMT, MODBY, MODDTTM, NOBILL, OVERAMT, PAIDDTTM, PAIDSTAT, PAYABLETO,
PAYORDER, PENAMT, PENEXEMPT, PRNCPLTOT, PROPADDR, STATE, ZIP, ARNGPAYAMT,
DISPAMT, VARIAMT, ARNGAMT, LIENAMT, COLLAMT, DEPDUEAMT, PENDFLAG, PENDTYPE,
DAYSRDS, PENFLAG, POSITION, AGGRBLKEY, INSTBLKEY, ACTAMT, BANKRPTKEY, COLLKEY, LIENKEY,
ACTUALAMT, ACTUALUSG, AGGRSTGKEY, BGTBLUSG, BILLADJAMT,
CUMVARIAMT, DISCEXPAMT, DISCEXPDT, INSTNO,
INSTTOTAMT, SETLAMT, STG2PRCKEY, STG3PRCKEY, STG4PRCKEY, STG5PRCKEY,
STG6PRCKEY, STG7PRCKEY, STG8PRCKEY
FROM @tmp A inner join imsv7.CUSTBL C ON (A.AcctKey = C.AcctKey AND A.DueDate = C.DueDate)
--WHERE C.ACCTKEY = @dwAcctkey
--AND C.DUEDATE <= @tsDueDate;
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'S/I CustBl', @seq, @theDate)
/* Copy SERVICE CHARGES to the archive table*/
INSERT INTO ARCHCHG
(ACCHGKEY, ACCTKEY, SRVCHGKEY, ADDBY, ADDDTTM, BLKEY, CHGBY, CHGDTTM,
MODBY, MODDTTM, OVRBY, SERVNO, SRVCHGVAL, WAIVEDBY, WAIVELEV)
SELECT
ACCHGKEY, A.ACCTKEY, SRVCHGKEY, ADDBY, ADDDTTM, A.BLKEY, CHGBY, CHGDTTM,
MODBY, MODDTTM, OVRBY, SERVNO, SRVCHGVAL, WAIVEDBY, WAIVELEV
FROM (
Select A.AcctKey, B.BlKey
FROM @tmp A inner join imsv7.CustBl B ON (A.AcctKey = B.AcctKey AND A.DueDate = B.DueDate)
) A Inner Join imsv7.ACCTCHG C ON (A.AcctKey = C.AcctKey And A.BlKey = C.BlKey)
--WHERE ACCTKEY = @dwAcctkey
--AND BLKEY IN (SELECT B.BLKEY FROM CUSTBL B
--WHERE B.ACCTKEY = @dwAcctkey
--AND B.DUEDATE <= @tsDueDate);
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'S/I AcctChg', @seq, @theDate)
/* Copy TRACKED READINGS to the archive table */
INSERT INTO ARCHTKRD
(ACCTKEY, COMPRDKEY, SRVKEY, ADDBY, ADDDTTM, BILLEDFLAG, BLKEY,
MODBY, MODDTTM, TRACKRDKEY, BLTYPEKEY)
SELECT
A.ACCTKEY, COMPRDKEY, SRVKEY, ADDBY, ADDDTTM, BILLEDFLAG, A.BLKEY,
MODBY, MODDTTM, TRACKRDKEY, BLTYPEKEY
FROM (
Select A.AcctKey, B.BlKey
FROM @tmp A inner join imsv7.CustBl B ON (A.AcctKey = B.AcctKey AND A.DueDate = B.DueDate)
) A Inner Join imsv7.TRACKRD C ON (A.AcctKey = C.AcctKey And A.BlKey = C.BlKey)
/*WHERE ACCTKEY = @dwAcctkey
AND BLKEY IN (SELECT B.BLKEY FROM CUSTBL B
WHERE B.ACCTKEY = @dwAcctkey
AND B.DUEDATE <= @tsDueDate);*/
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'S/I TrackRD', @seq, @theDate)
/* Copy LINE ITEMS to the archive table - no lvarchar column */
/* Deposit, interest and dispute columns are not archived */
INSERT INTO ARCHLI
(BLITEMKEY, ACCTKEY, ARNGFLAG, DUNEXEMPT, BLITEM, BLKEY, BLSTGKEY, ACCHGKEY, ADDBY, ADDDTTM,
ASDVALFLAG, BLITEMAMT, BLITEMGRP, BLITEMRATE, BLITEMTYPE, BLUSG, BLVAL, CALCORDER,
CNSVALFLAG, COMBINED, DONATION, DISCOUNT, EFFLUENT, FCONDKEY, FINTKEY, FPNLTYKEY,
FVALKEY, MODBY, MODDTTM, PAIDSTAT, PENCBGTNO, PENPAYORD, PENPBGTNO,
PRNCCBGTNO, PRNCPAYORD, PRNCPBGTNO, PRNORDER, PRNTTEXT, PRORATE,
RATEFLAG, RDBASED, REFTEXT, SRVAREA, SRVBASED, SRVCLASS,
SRVKEY, SRVTYPE, SRVVAL1, SRVVAL2, SRVVAL3, SURCHG, TAXAREA, PENDFLAG,
PENDTYPE, WINTERAVG, FDSCEXPKEY, DISCEXPDT, ITEMSUKEY, PENCHGFLAG, PENEXEMPT,
DEPBGTNO, DEPOSIT, DSPADDBY, DSPDESC, DSPDTTM, DSPREAS, DSPRES, DSPRESBY, DSPRESDTTM, INTBGTNO, USGFLAG)
SELECT
BLITEMKEY, A.ACCTKEY, ARNGFLAG, DUNEXEMPT, BLITEM, A.BLKEY, BLSTGKEY, ACCHGKEY, ADDBY, ADDDTTM,
ASDVALFLAG, BLITEMAMT, BLITEMGRP, BLITEMRATE, BLITEMTYPE, BLUSG, BLVAL, CALCORDER,
CNSVALFLAG, COMBINED, DONATION, DISCOUNT, EFFLUENT, FCONDKEY, FINTKEY, FPNLTYKEY,
FVALKEY, MODBY, MODDTTM, PAIDSTAT, PENCBGTNO, PENPAYORD, PENPBGTNO,
PRNCCBGTNO, PRNCPAYORD, PRNCPBGTNO, PRNORDER, PRNTTEXT, PRORATE,
RATEFLAG, RDBASED, REFTEXT, SRVAREA, SRVBASED, SRVCLASS,
SRVKEY, SRVTYPE, SRVVAL1, SRVVAL2, SRVVAL3, SURCHG, TAXAREA, PENDFLAG,
PENDTYPE, WINTERAVG, FDSCEXPKEY, DISCEXPDT, ITEMSUKEY, PENCHGFLAG, PENEXEMPT,
DEPBGTNO, DEPOSIT, DSPADDBY, DSPDESC, DSPDTTM, DSPREAS, DSPRES, DSPRESBY, DSPRESDTTM, INTBGTNO, USGFLAG
FROM (
Select A.AcctKey, B.BlKey
FROM @tmp A inner join imsv7.CustBl B ON (A.AcctKey = B.AcctKey AND A.DueDate = B.DueDate)
) A Inner Join imsv7.BLITEM C ON (A.AcctKey = C.AcctKey And A.BlKey = C.BlKey)
/*WHERE B.ACCTKEY = @dwAcctkey
AND B.BLKEY IN (SELECT C.BLKEY FROM CUSTBL C
WHERE C.ACCTKEY = @dwAcctkey
AND C.DUEDATE <= @tsDueDate);*/
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'S/I BlItem', @seq, @theDate)
/* Copy PAYMENTS To the archive table */
INSERT INTO ARCHPAY
(PAYKEY, ACCTKEY, BATCHKEY, TRACENO, ACCTNO, ACCTTYPE, ADDBY,
ADDDTTM, BLTYPEKEY, CARDAUTH, CARDBANK, CARDEXP, CARDNAME,
CARDNO, CARDTYPE, CHECKBANK, CHECKID, CHECKNAME, CHECKNO,
MODBY, MODDTTM, PAYAMT, PAYDTTM, PAYMETHOD, PAYSTAT, RECDBY,
REGTRANNO, RESBGTNO, RESBY, RESCODE, RESDTTM, SRC, UNMATCRES,
DONATEFLAG, DONATEAMT, AGGRBLKEY,
MISCISSUED, MISCREFNO, MISCTYPE, PENDTYPE)
SELECT
PAYKEY, A.ACCTKEY, BATCHKEY, TRACENO, ACCTNO, ACCTTYPE, ADDBY,
ADDDTTM, BLTYPEKEY, CARDAUTH, CARDBANK, CARDEXP, CARDNAME,
CARDNO, CARDTYPE, CHECKBANK, CHECKID, CHECKNAME, CHECKNO,
MODBY, MODDTTM, PAYAMT, PAYDTTM, PAYMETHOD, PAYSTAT, RECDBY,
REGTRANNO, RESBGTNO, RESBY, RESCODE, RESDTTM, SRC, UNMATCRES,
DONATEFLAG, DONATEAMT, AGGRBLKEY,
MISCISSUED, MISCREFNO, MISCTYPE, PENDTYPE
FROM @tmp A inner join imsv7.ACCTPAY C ON (A.AcctKey = C.AcctKey AND A.DueDate = C.PAYDTTM)
/*WHERE P.ACCTKEY = @dwAcctkey
AND P.PAYDTTM <= @tsDueDate;*/
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'S/I AcctPay', @seq, @theDate)
/* Copy TRANSACTIONS to the archive table - no lvarchar column*/
INSERT INTO ARCHTRAN
(ACTRANNO, ACCTKEY, TRANTYPE, ADDBY, ADDDTTM, ADJREAS, ADJTYPE, APPROVBY, AUTH,
BGTNO, BLITEMKEY, BLKEY, BLSTGKEY, BLTYPEKEY, COMMENTS, DLNQDATE, EVENTID,
MASSADJKEY, MODBY, MODDTTM, PAIDSTAT, PAYKEY, PENASMKEY, REFTRANNO,
TRANAMT, TRANBY, TRANDES, TRANDTTM, PENDFLAG, PENDTYPE)
SELECT
ACTRANNO, A.ACCTKEY, TRANTYPE, ADDBY, ADDDTTM, ADJREAS, ADJTYPE, APPROVBY, AUTH,
BGTNO, BLITEMKEY, BLKEY, BLSTGKEY, BLTYPEKEY, COMMENTS, DLNQDATE, EVENTID,
MASSADJKEY, MODBY, MODDTTM, PAIDSTAT, PAYKEY, PENASMKEY, REFTRANNO,
TRANAMT, TRANBY, TRANDES, TRANDTTM, PENDFLAG, PENDTYPE
FROM @tmp A inner join imsv7.AcctTran C ON (A.AcctKey = C.AcctKey AND A.DueDate = C.TRANDTTM)
/*WHERE A.ACCTKEY = @dwAcctkey
AND A.TRANDTTM <= @tsDueDate;*/
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'S/I AcctTran', @seq, @theDate)
UPDATE DEPTRAN
SET BLKEY = 1, BLITEMKEY = 1
WHERE ACCTKEY IN (Select AcctKey FROM @tmp)
AND BLKEY IN ( Select B.BlKey
FROM @tmp A inner join imsv7.CustBl B
ON (A.AcctKey = B.AcctKey AND A.DueDate = B.DueDate) );
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'Upd DepTran From CustBl', @seq, @theDate)
UPDATE DEPTRAN
SET PAYKEY = 1
WHERE ACCTKEY IN (Select AcctKey FROM @tmp)
AND PAYKEY IN ( Select B.PAYKEY
FROM @tmp A inner join imsv7.ACCTPAY B
ON (A.AcctKey = B.AcctKey AND A.DueDate = B.PAYDTTM) );
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'Upd DepTran From AcctPay', @seq, @theDate)
/* Copy LINE ITEMS RT to the archive table - no lvarchar column */
INSERT INTO ARCHLIRT
(BLITEMKEY, ACCTKEY, BLITRTKEY, BLSTGKEY, ADDBY, ADDDTTM, FULLAMT, PRORATEAMT,
MODBY, MODDTTM, RTBASECHG, RTMAXCHG, RTMINCHG,
RTCHG1, RTCHG2, RTCHG3, RTCHG4, RTCHG5, RTCHG6, RTCHG7, RTCHG8, RTCHG9, RTCHG10,
RTRATE1, RTRATE2, RTRATE3, RTRATE4, RTRATE5, RTRATE6, RTRATE7, RTRATE8, RTRATE9, RTRATE10,
RTUSG1, RTUSG2, RTUSG3, RTUSG4, RTUSG5, RTUSG6, RTUSG7, RTUSG8, RTUSG9, RTUSG10,
RTRATECODE, RTSTDDAYS, RTUNIT, RTUOM, RTUSGDAYS, SRVKEY, SRVUSGDAYS)
SELECT
BLITEMKEY, A.ACCTKEY, BLITRTKEY, BLSTGKEY, ADDBY, ADDDTTM, FULLAMT, PRORATEAMT,
MODBY, MODDTTM, RTBASECHG, RTMAXCHG, RTMINCHG,
RTCHG1, RTCHG2, RTCHG3, RTCHG4, RTCHG5, RTCHG6, RTCHG7, RTCHG8, RTCHG9, RTCHG10,
RTRATE1, RTRATE2, RTRATE3, RTRATE4, RTRATE5, RTRATE6, RTRATE7, RTRATE8, RTRATE9, RTRATE10,
RTUSG1, RTUSG2, RTUSG3, RTUSG4, RTUSG5, RTUSG6, RTUSG7, RTUSG8, RTUSG9, RTUSG10,
RTRATECODE, RTSTDDAYS, RTUNIT, RTUOM, RTUSGDAYS, SRVKEY, SRVUSGDAYS
FROM @tmp A inner join imsv7.BLITEMRT C ON (A.AcctKey = C.AcctKey AND A.DueDate = C.ADDDTTM)
/*WHERE B.ACCTKEY = @dwAcctkey
AND B.ADDDTTM <= @tsDueDate;*/
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'S/I BlItemRT', @seq, @theDate)
/* Copy BBTRAN to the archive table - no lvarchar column */
INSERT INTO ARCHBBTR
(BBTRANKEY, ACCTKEY, SRVKEY, BLSTGKEY, TRANTYPE, TRANDTTM, BLUSG,
BGTBLUSG, BLDAMT, BGTBLDAMT, ADDBY, ADDDTTM, MODBY, MODDTTM)
SELECT
BBTRANKEY, A.ACCTKEY, SRVKEY, BLSTGKEY, TRANTYPE, TRANDTTM, BLUSG,
BGTBLUSG, BLDAMT, BGTBLDAMT, ADDBY, ADDDTTM, MODBY, MODDTTM
FROM @tmp A inner join imsv7.BBTRAN C ON (A.AcctKey = C.AcctKey AND A.DueDate = C.ADDDTTM)
/*WHERE B.ACCTKEY = @dwAcctkey
AND B.ADDDTTM <= @tsDueDate;*/
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'S/I BBTran', @seq, @theDate)
/* */
/* DELETE THE ACTIVE RECORDS */
/* */
/* Delete SERVICE CHARGES that have been archived*/
DELETE FROM ACCTCHG
WHERE ACCTKEY IN (Select AcctKey FROM @tmp)
AND BLKEY IN ( Select B.BlKey
FROM @tmp A inner join imsv7.CustBl B
ON (A.AcctKey = B.AcctKey AND A.DueDate = B.DueDate) );
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'Del AcctChg', @seq, @theDate)
/* Delete TRACKED READINGS that have been archived */
DELETE FROM TRACKRD
WHERE ACCTKEY IN (Select AcctKey FROM @tmp)
AND BLKEY IN ( Select B.BlKey
FROM @tmp A inner join imsv7.CustBl B
ON (A.AcctKey = B.AcctKey AND A.DueDate = B.DueDate) );
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'Del TrackRD', @seq, @theDate)
/* Delete LINE ITEMS that have been archived*/
DELETE FROM BLITEM
WHERE ACCTKEY IN (Select AcctKey FROM @tmp)
AND BLKEY IN ( Select B.BlKey
FROM @tmp A inner join imsv7.CustBl B
ON (A.AcctKey = B.AcctKey AND A.DueDate = B.DueDate) )
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'Del BlItem', @seq, @theDate)
/* Delete PAYMENTS that have been archived*/
DELETE FROM ACCTPAY
WHERE ACCTKEY IN (Select AcctKey FROM @tmp)
AND PAYDTTM IN ( Select B.PayDtTm
From @tmp A inner join imsv7.acctpay B
ON (A.Acctkey = B.Acctkey And B.PayDtTm <= A.DueDate) )
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'Del AcctPay', @seq, @theDate)
/* Delete TRANSACTIONS that have been archived*/
DELETE FROM ACCTTRAN
WHERE ACCTKEY IN (Select AcctKey FROM @tmp)
AND TRANDTTM IN ( Select B.TRANDTTM
From @tmp A inner join imsv7.ACCTTRAN B
ON (A.Acctkey = B.Acctkey And B.TRANDTTM <= A.DueDate) )
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'Del AcctTran', @seq, @theDate)
/* Delete BILL INSERTS */
DELETE FROM BLINSR
WHERE ACCTKEY IN (Select AcctKey FROM @tmp)
AND BLKEY IN ( Select B.BlKey
FROM @tmp A inner join imsv7.CustBl B
ON (A.AcctKey = B.AcctKey AND A.DueDate = B.DueDate) );
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'Del BlInsr', @seq, @theDate)
/* Delete BILLS that have been archived */
/* BILLS MUST BE DELETED LAST - THEY ARE USED IN THE OTHER QUERIES*/
DELETE FROM CUSTBL
WHERE ACCTKEY IN (Select AcctKey FROM @tmp)
AND DUEDATE IN ( Select B.DUEDATE
From @tmp A inner join imsv7.CUSTBL B
ON (A.Acctkey = B.Acctkey And B.DUEDATE <= A.DueDate) )
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'Del CustBl', @seq, @theDate)
/* Delete BLITEMRT that have been archived*/
DELETE FROM BLITEMRT
WHERE ACCTKEY IN (Select AcctKey FROM @tmp)
AND ADDDTTM IN ( Select B.ADDDTTM
From @tmp A inner join imsv7.BLITEMRT B
ON (A.Acctkey = B.Acctkey And B.ADDDTTM <= A.DueDate) )
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'Del BlItemRT', @seq, @theDate)
/* Delete BBTRAN that have been archived */
DELETE FROM BBTRAN
WHERE ACCTKEY IN (Select AcctKey FROM @tmp)
AND ADDDTTM IN ( Select B.ADDDTTM
From @tmp A inner join imsv7.BBTRAN B
ON (A.Acctkey = B.Acctkey And B.ADDDTTM <= A.DueDate) )
Set @theDate = GetDate()
Insert Into imsv7.ArchiveTracking Values (@dwAcctKey, 'Del BBTran', @seq, @theDate)
END;
GO