Una de las recomendaciones más tópicas a la hora de escribir scripts  en T-SQL  es  la de eliminar el empleo de cursores siempre que sea posible. 
Brad McGehee en sql-server-performance.com habla del tema. Y aunque menciona el uso de WHILE como alternativa al cursor no pone ningún modelo como ejemplo
declare @loop int create table #test (clave int identity(1,1) not null, dbname varchar (60)) insert into #test select name from master..sysdatabases SET  @counter= 1                                 SELECT @dbname =  rtrim(dbname) FROM #test                                  WHERE clave = @counter                                   print @dbname                                 SET @counter = @counter +1 Select * from #test DROP TABLE #test  | 
|    declare @counter int declare @dbname varchar (60) create table #testcur (dbname varchar (60)) begin               print @dbname                fetch next from dbcursor into @dbname end close dbcursor deallocate dbcursor drop table #testcur  |