Something along these lines should do it:--/* setup/initialization codeCREATE TABLE dbo.SourceTableHistory ( OldAccountNumber int NOT NULL, NewAccountNumber int NOT NULL, NewAcountNumberTime datetime NULL )SET NOCOUNT ONTRUNCATE TABLE dbo.SourceTableHistoryINSERT INTO dbo.SourceTableHistory--add some additional history to show that it is properly handledSELECT 066, 077, '2011-06-01 00:00:00.000' UNION ALLSELECT 077, 088, '2011-07-01 00:00:00.000' UNION ALLSELECT 088, 099, '2011-08-01 00:00:00.000' UNION ALLSELECT 099, 111, '2011-09-01 00:00:00.000' UNION ALLSELECT 111, 222, '2012-01-01 00:00:00.000' UNION ALLSELECT 222, 333, '2012-05-06 00:00:00.000'SET NOCOUNT OFFCREATE TABLE dbo.AccountNumberConversions ( ident int IDENTITY(1, 1) NOT NULL, RecordType char(7) NOT NULL, OldAccountNumber int NOT NULL, NewAccountNumber int NOT NULL )--*/DECLARE @rowcount intTRUNCATE TABLE dbo.AccountNumberConversions INSERT INTO dbo.AccountNumberConversionsSELECT 'Current', OldAccountNumber, NewAccountNumberFROM dbo.SourceTableHistory sth1WHERE NOT EXISTS( SELECT 1 FROM dbo.SourceTableHistory sth2 WHERE sth2.OldAccountNumber = sth1.NewAccountNumber )SET @rowcount = 1WHILE @rowcount > 0BEGIN INSERT INTO dbo.AccountNumberConversions SELECT 'History', sth_history.OldAccountNumber, anc_current.NewAccountNumber FROM dbo.SourceTableHistory sth_history INNER JOIN dbo.AccountNumberConversions anc_history ON anc_history.OldAccountNumber = sth_history.NewAccountNumber INNER JOIN dbo.AccountNumberConversions anc_current ON anc_current.NewAccountNumber = anc_history.NewAccountNumber AND anc_current.RecordType = 'Current' LEFT OUTER JOIN dbo.AccountNumberConversions anc_check_existing ON anc_check_existing.OldAccountNumber = sth_history.OldAccountNumber WHERE anc_check_existing.OldAccountNumber IS NULL SET @rowcount = @@ROWCOUNTEND --WHILE--show list of all old account numbers and --the new number that should replace themSELECT * FROM dbo.AccountNumberConversions/*UPDATE ttSET tt.AccountNumber = anc.NewAccountNumberFROM dbo.TargetTable ttINNER JOIN dbo.AccountNumberConversions anc ON anc.OldAccountNumber = tt.AccountNumber*/