sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man använder markören för att uppdatera posten

Det verkar som att du vill tilldela ett ökat värde till empno som börjar med 10.

Du kan använda en CTE och row_number() för att göra det. Inget behov av en markör.

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

Din markörversion kan se ut så här för att göra detsamma.

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. BULK INSERT från kommaavgränsad sträng

  2. C# Parameteriserad fråga MySQL med "in"-sats

  3. Kan jag uppdatera ett INT-värde + 1 och returnera det nya värdet?

  4. Parentesreglerna för PostgreSQL, finns det en sammanfattad guide?