Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak używać kursora do aktualizacji rekordu

Wygląda na to, że chcesz przypisać zwiększoną wartość do empno zaczynając od 10.

W tym celu możesz użyć CTE i row_number(). Nie ma potrzeby używania kursora.

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

Twoja wersja kursora może wyglądać tak samo.

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;  


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy mogę użyć CTE programu SQL Server do scalania przecinających się dat?

  2. Jak podzielić ciąg i wstawić wartości do tabeli w SQL Server

  3. Użyj SERVERPROPERTY(), aby uzyskać informacje o serwerze w SQL Server

  4. Dynamiczna zmiana typu zwracanego funkcji

  5. SQL Server 2008 R2 — wyspy i luki