Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come utilizzare il cursore per aggiornare il record

Sembra che tu voglia assegnare un valore incrementato a empno che inizia con 10.

Puoi usare un CTE e row_number() per farlo. Non c'è bisogno di un cursore.

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

La versione del tuo cursore potrebbe assomigliare a questa per fare lo stesso.

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;