Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment utiliser le curseur pour mettre à jour l'enregistrement

Il semble que vous souhaitiez attribuer une valeur incrémentée à empno en commençant par 10.

Vous pouvez utiliser un CTE et row_number() pour le faire. Pas besoin de curseur.

;with C as
(
  select empno,
         9 + row_number() over(order by (select 1)) as NewEmpNo
  from emp       
)
update C
set empno = NewEmpNo

Votre version de curseur pourrait ressembler à ceci pour faire la même chose.

DECLARE @empno AS INT;
DECLARE @CurEmpNo AS INT;

SELECT @empno = 10;

DECLARE employee_cursor CURSOR FOR
  SELECT empno
  FROM   emp

OPEN employee_cursor;

FETCH NEXT FROM employee_cursor INTO @CurEmpNo

WHILE @@FETCH_STATUS = 0
  BEGIN
      UPDATE emp
      SET    empno = @empno
      WHERE  CURRENT OF employee_cursor;

      SELECT @empno = @empno + 1;

      FETCH NEXT FROM employee_cursor INTO @CurEmpNo
  END;

CLOSE employee_cursor;

DEALLOCATE employee_cursor;