Sunday, July 29, 2018

Iterate through a result set using Cursor or While Loop


There are different ways in which you can looping records of your table I just share some examples, Let you decide which fit best in you scenario.

DECLARE @Customer_id numeric
DECLARE @cur_emp as CURSOR;

SET @cur_emp = CURSOR FORWARD_ONLY FOR
Select  Coin_ID From test_auto

OPEN @cur_emp;
FETCH NEXT FROM @cur_emp INTO @Customer_id;
 WHILE @@FETCH_STATUS = 0
BEGIN
      print @Customer_id
     FETCH NEXT FROM @cur_emp INTO @Customer_id;
END
CLOSE @cur_emp;
DEALLOCATE @cur_emp;


GO

DECLARE @Customer_id numeric
DECLARE @cur_emp as CURSOR;

SET @cur_emp = CURSOR FAST_FORWARD  FOR
Select  Coin_ID From test_auto

OPEN @cur_emp;
FETCH NEXT FROM @cur_emp INTO @Customer_id;
 WHILE @@FETCH_STATUS = 0
BEGIN
      print @Customer_id
     FETCH NEXT FROM @cur_emp INTO @Customer_id;
END
CLOSE @cur_emp;
DEALLOCATE @cur_emp;


GO

DECLARE @Customer_id numeric
 DECLARE cur_emp CURSOR
STATIC FOR
Select  Coin_ID From test_auto
OPEN cur_emp
IF @@CURSOR_ROWS > 0
 BEGIN
 FETCH NEXT FROM cur_emp INTO @Customer_id
 WHILE @@Fetch_status = 0
 BEGIN
 print @Customer_id

 FETCH NEXT FROM cur_emp INTO @Customer_id
 END
END
CLOSE cur_emp
DEALLOCATE cur_emp
SET NOCOUNT OFF

GO


DECLARE @count INT
 DECLARE @row INT
 Declare @Coin_ID int
 SET @row = 1
 SELECT @count = COUNT(Coin_ID) FROM test_auto
 WHILE (@row <= @count)
 BEGIN
     Select  @Coin_ID = Coin_ID From test_auto

    --Do some processing here
print @Coin_ID
 SET @row += 1
END


Refer links:
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/declare-cursor-transact-sql?view=sql-server-2017
https://sqlperformance.com/2012/09/t-sql-queries/cursor-options
https://www.techrepublic.com/blog/the-enterprise-cloud/comparing-cursor-vs-while-loop-performance-in-sql-server-2008/
http://stevestedman.com/2015/03/simple-cursor-example-forward_only-vs-fast-forward/


No comments:

Post a Comment