What is the difference between Cursor For update and general update in SQL Server

54 Views Asked by At

I would like to understand the difference between these different code snippets in SQL Server and also would like to know which one performs well in PROD bulk updates Scenario...Please check and advice...Thank you in advance for your time and valuable inputs in this regard.

Snippet 1 :

  DECLARE @EmpID
    
  DECLARE C_XML2 CURSOR LOCAL FOR  SELECT emp_code FROM r5employees WHERE emp_status = 'A' 
  AND emp_class = 'EMP' AND emp_location IS NULL FOR UPDATE
  
  BEGIN
      OPEN C_XML2
      FETCH NEXT FROM C_XML2 into @EmpID
      
      WHILE @@FETCH_STATUS =0
      BEGIN
          UPDATE r5employees SET emp_status = 'NA' WHERE emp_status = 'A' 
          AND emp_class = 'EMP' AND emp_location IS NULL AND emp_code = @EmpID
      FETCH NEXT FROM C_XML2 into @EmpID
  END
  CLOSE C_XML2
  DEALLOCATE C_XML2
  END

Snippet 2

DECLARE @EmpID
    
  DECLARE C_XML2 CURSOR LOCAL FOR  SELECT emp_code FROM r5employees WHERE emp_status = 'A' 
  AND emp_class = 'EMP' AND emp_location IS NULL 
  
  BEGIN
      OPEN C_XML2
      FETCH NEXT FROM C_XML2 into @EmpID
      
      WHILE @@FETCH_STATUS =0
      BEGIN
          UPDATE r5employees SET emp_status = 'NA' WHERE emp_status = 'A' 
          AND emp_class = 'EMP' AND emp_location IS NULL WHERE UPDATE OF C_XML2
      FETCH NEXT FROM C_XML2 into @EmpID
  END
  CLOSE C_XML2
  DEALLOCATE C_XML2
  END

Snippet 3

DECLARE @EmpID
    
  DECLARE C_XML2 CURSOR LOCAL FOR  SELECT emp_code FROM r5employees WHERE emp_status = 'A' 
  AND emp_class = 'EMP' AND emp_location IS NULL 
  
  BEGIN
      OPEN C_XML2
      FETCH NEXT FROM C_XML2 into @EmpID
      
      WHILE @@FETCH_STATUS =0
      BEGIN
          UPDATE r5employees SET emp_status = 'NA' WHERE emp_status = 'A' 
          AND emp_class = 'EMP' AND emp_location IS NULL 
      FETCH NEXT FROM C_XML2 into @EmpID
  END
  CLOSE C_XML2
  DEALLOCATE C_XML2
  END
0

There are 0 best solutions below