I don't know your schema so consider this as psudocode, but this will be faster due to the fact that it isn't using a cursor (as suggested previously). Then, if possible, I would add datetime columns which you can use to compare the date your _CustomerUpdate table was changed with the date your CustTreeNodeAccountAssoc table was updated. This will prevent the need to retrieve all 600K+ records, that will also considerably speed things up and it will scale better as the number of records increases. Declare @ARbal money, @CustTreeNodeID uniqueidentifier, @CustomerNumber varchar(50), @CustomerUpdateID int, @LYSales money, @LYTDSales money, @YTDgm money, @YTDSales money, @MTDSales money, @LMTDSales money Declare @t table ( CustomerUpdateID int, CustomerNumber varchar(50), YTDSales money, LYSales money, ARBal money, LYTDSales money, MTDSales money, LMTDSales money ) insert into @t(CustomerUpdateID, CustomerNumber,YTDSales, LYSales,ARBal, LYTDsales,MTDSales,LMTDSales) select CustomerUpdateID, CustomerNumber, YTDSales, LYSales, ARBal, LYTDSales, MTDSales, LMTDSales from _CustomerUpdate u where exists (select 1 from CustTreeNode c join CustTreeNodeaccountAssoc ca on ca.CustTreeNodeID = c.CustTreeNodeID and (u.LYTDSales != ca.LYTD or u.YTDSales != ca.YTD or u.MTDSales!= ca.MTD or u.LMTDSales !=ca.LMTD )) -- REPLACE YOUR CURSOR WITH THIS CODE BELOW (or something similar that better fits your logic) UPDATE A YTD = T.YTDSales, LYTD = T.LYSales, Balance = T.ARBal FROM @t T INNER JOIN CustTreeNode N ON N.CustomerNumber = T.CustomerNumber INNER JOIN CustTreeNodeAccountAssoc A ON A.CustTreeNodeID = N.CustTreeNodeID
Mark's blog: developMENTALmadness.blogspot.com