If I have table Test with two columns num1 and num2 and the following trigger on it which just increments num2 on inserts of num1:
 DECLARE @PROC_NEWNUM1 VARCHAR (10)
 DECLARE @NEWNUM2 numeric(20)
 DECLARE my_Cursor CURSOR FOR SELECT num1 FROM INSERTED;
 OPEN my_Cursor 
 FETCH NEXT FROM my_Cursor into @PROC_NEWNUM1
 WHILE @@FETCH_STATUS = 0 
 BEGIN 
 select @NEWNUM2 = MAX(num2) from TEST
 if @NEWNUM2 is null
 Begin
    set  @NEWNUM2  = 0
 End
 set @NEWNUM2 = @NEWNUM2 + 1
 UPDATE TEST SET num2 = @NEWNUM2  WHERE num1 = @PROC_NEWNUM1
 FETCH NEXT FROM my_Cursor into @PROC_NEWNUM1  
 END
CLOSE my_Cursor
DEALLOCATE my_Cursor
Is there a way to rewrite the above using a set based approach?
(In case anyone wants to know why I am doing this, here is the background: SQL Server A trigger to work on multiple row inserts)
Solution without temp table using Row_Number (Sql 2005 onwards only):
SELECT @MAXNUM2 = MAX(num2) FROM TEST
if @MAXNUM2 IS NULL
BEGIN
    SET @MAXNUM2=0
END
UPDATE TEST
SET num2 = @MAXNUM2 + SubQuery.R
FROM
(
SELECT num1, ROW_NUMBER() OVER (ORDER BY num1) as R FROM inserted
)
SubQuery
INNER JOIN TEST on SubQuery.num1 =  TEST.num1