have you ever used a while loop in SQL.. i tend to use these over cursors these days and find they perform a lot better.
here is a sample code showing a while loop:
IF EXISTS (SELECT *
FROM tempdb.dbo.sysobjects o
WHERE o.xtype IN ('U')
AND o.id = OBJECT_ID(N'tempdb..##TlbLog'))
DROP TABLE ##TlbLog
CREATE TABLE ##TlbLog
(
ID INT
,UserID INT
,Purpose VARCHAR(20)
,DateCreated DATETIME
,seen BIT DEFAULT 0
)
INSERT INTO ##TlbLog
(ID, UserID, Purpose, DateCreated) VALUES
(1, 500, 'login' ,'2013-03-24 14:39:43.273')
,(2, 501, 'login' ,'2013-03-24 14:39:43.277')
,(3, 502, 'login' ,'2013-03-24 14:39:43.277')
,(4, 503, 'login' ,'2013-03-24 14:39:43.277')
,(5, 500, 'logout' ,'2013-03-24 14:44:43.280')
,(6, 501, 'logout' ,'2013-03-24 14:44:43.280')
,(2, 501, 'login' ,'2013-03-24 14:55:43.277')
,(6, 501, 'logout' ,'2013-03-24 15:55:43.280')
DECLARE @count INT
,@rowNumber INT
,@tblID INT
,@tblUserID INT
,@tblPurpose VARCHAR(20)
,@tblDateCreated DATETIME
SELECT @count = COUNT(*), @rowNumber = 1 FROM ##TlbLog
WHILE @count >=@rowNumber
BEGIN
SELECT TOP 1 @tblID = ID
,@tblUserID = UserID
,@tblPurpose = Purpose
,@tblDateCreated = DateCreated
FROM ##TlbLog
WHERE seen = 0
--do whatever your looking to do
UPDATE ##TlbLog SET seen = 1 WHERE id = @tblID
SET @rowNumber = @rowNumber+1
END
SELECT *
FROM ##TlbLog