Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como usar o cursor para atualizar o registro


Parece que você deseja atribuir um valor incrementado a empno começando com 10.

Você pode usar um CTE e row_number() para fazer isso. Não há necessidade de um cursor.
;with C as
(
  select empno,
         9 + row_number() over(order by (select 1)) as NewEmpNo
  from emp       
)
update C
set empno = NewEmpNo

Sua versão do cursor pode ter esta aparência para fazer o mesmo.
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;