Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 不';在SQL Server 2008中更新结果行时,不要停止游标循环_Sql Server_Cursor - Fatal编程技术网

Sql server 不';在SQL Server 2008中更新结果行时,不要停止游标循环

Sql server 不';在SQL Server 2008中更新结果行时,不要停止游标循环,sql-server,cursor,Sql Server,Cursor,我想将Driver表的DriverID列设置为50005001 为此,我编写了以下脚本: use WeighbridgeDB GO DECLARE @NewDriverID int; SET @NewDriverID = 5000; DECLARE Driver_Cursor CURSOR FOR SELECT DriverID FROM Driver FOR UPDATE; OPEN Driver_Cursor; FETCH NEXT FROM Driver_Cursor WHIL

我想将
Driver
表的
DriverID
列设置为50005001

为此,我编写了以下脚本:

use WeighbridgeDB
GO

DECLARE @NewDriverID int;
SET @NewDriverID = 5000;

DECLARE Driver_Cursor CURSOR FOR 
SELECT DriverID FROM Driver
FOR UPDATE;

OPEN Driver_Cursor;

FETCH NEXT FROM Driver_Cursor

WHILE @@FETCH_STATUS = 0
BEGIN
    UPDATE Driver SET DriverID = @NewDriverID WHERE CURRENT OF Driver_Cursor;
    SET @NewDriverID += 1;
    FETCH NEXT FROM Driver_Cursor
END

CLOSE Driver_Cursor;
DEALLOCATE Driver_Cursor;
GO
但是While循环不会停止,
@@FETCH\u STATUS
的值始终为0。我认为游标会自我重建,因为更新发生在表或其他地方

如何纠正这种情况


谢谢。

无论如何,您不需要光标(一般来说,在TSQL中尽量避免使用光标,只有极少数情况除外)


无论如何,您都不需要光标(一般来说,在TSQL中尽量避免使用光标,只有极少数情况除外)


您可以这样做:

UPDATE Driver
SET
    Driver.DriverID = d.NewDriverID 
FROM
(
    select 
        ROW_NUMBER() Over (ORDER BY DriverID) + 5000 AS NewDriverID,
        Driver.DriverID 
    from Driver 
) AS d
WHERE Driver.DriverID = p.DriverID 

几乎没有理由使用光标。

您可以这样做:

UPDATE Driver
SET
    Driver.DriverID = d.NewDriverID 
FROM
(
    select 
        ROW_NUMBER() Over (ORDER BY DriverID) + 5000 AS NewDriverID,
        Driver.DriverID 
    from Driver 
) AS d
WHERE Driver.DriverID = p.DriverID 

几乎没有理由使用光标。

我猜您错过了从驱动程序获取后的下一步_cursor@PrashantLakhlani-您不需要将
转换为
。这意味着该行将被发送到连接的客户端。由于OP并没有试图使用当前行中的任何值,所以它显然没有错。我猜您错过了从驱动程序获取下一个值之后的操作_cursor@PrashantLakhlani-您不需要将
转换为
。这意味着该行将被发送到连接的客户端。由于OP没有试图使用当前行中的任何值,所以它显然没有错。