Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So verwenden Sie den Cursor, um den Datensatz zu aktualisieren

Es sieht so aus, als ob Sie empno beginnend mit 10 einen inkrementierten Wert zuweisen möchten.

Dazu können Sie einen CTE und row_number() verwenden. Kein Cursor erforderlich.

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

Ihre Cursor-Version könnte so aussehen, um dasselbe zu tun.

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;