viv*_*vek 2 sql sql-server sql-server-2008
我正在使用下面的查询来更新我的所有记录,但它从第二行开始更新如何修改它以从第1行进行更改?
我正在使用mssql 2008
我认为我不能@@FETCH_STATUS用作第一线,因为它是全球性的.
提前致谢
use vivdb
DECLARE @empno as int;
select @empno = 10;
DECLARE Employee_Cursor CURSOR FOR select * from emp
OPEN Employee_Cursor;
FETCH NEXT from Employee_Cursor
WHILE @@FETCH_STATUS = 0
BEGIN
update emp set empno = @empno;
select @empno = @empno+1;
FETCH NEXT from Employee_Cursor
END;
CLOSE Employee_Cursor;
DEALLOCATE Employee_Cursor;
GO
Run Code Online (Sandbox Code Playgroud)
Mik*_*son 10
看起来你想要为从10开始的empno分配一个递增的值.
您可以使用CTE和row_number()来执行此操作.不需要游标.
;with C as
(
select empno,
9 + row_number() over(order by (select 1)) as NewEmpNo
from emp
)
update C
set empno = NewEmpNo
Run Code Online (Sandbox Code Playgroud)
游标版本可能看起来像这样做.
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;
Run Code Online (Sandbox Code Playgroud)