Right thanks for the tips everyone, pretty much got what I want working now and in case it should help someone in the future it looks like this in its basic form.Many thanks 


alter TRIGGER TrgTest ON client AFTER UPDATEAS BEGIN SET NOCOUNT ON; -- Create temporary Table of updated positive and negative responders select i.client_id, d.positive_responder as Dpositive_Responder, d.negative_responder as Dnegative_Responder, i.positive_responder as Ipositive_Responder, i.negative_responder as Inegative_Responder into #tmpResponders from inserted as I left outer join deleted as d on d.client_id = i.client_id where ((i.positive_responder <> d.positive_responder) or (d.negative_responder <> d.negative_responder)) -- Declare Variables declare @dPos bit, @dNeg bit, @iPos bit, @iNeg bit, @NextRowId int, @CurrentRowId int, @LoopControl int -- Initialize Variables select @LoopControl =1 select @nextRowId = min(client_id) from #TmpResponders -- Make sure we have some data to work with if isnull(@nextRowId,0)=0 begin --select 'No data found to work with' return end -- Get the first row select @CurrentRowId = Client_id, @dPos = Dpositive_Responder, @dNeg = Dnegative_Responder , @iPos = Ipositive_Responder, @iNeg = Inegative_Responder from #TmpResponders where client_id = @NextRowId -- Start the main processing Loop while @LoopControl = 1 begin -------------------------------- -- Do Row by row processing here -------------------------------- print @CurrentRowId -------------------------------- -------------------------------- -------------------------------- -- Reset Looping variables select @NextRowId = null -- Get the next Client_ID select @NextRowId = min(client_id) from #TmpResponders where Client_Id > @CurrentRowID -- Check we have a next rowID if isnull(@NextRowId,0) = 0 begin Break -- Stop processing the loop end -- Get the next row select @CurrentRowId = Client_id, @dPos = Dpositive_Responder, @dNeg = Dnegative_Responder , @iPos = Ipositive_Responder, @iNeg = Inegative_Responder from #TmpResponders where client_id = @NextRowId end -- Loop EndENDGO