【问题标题】:Cursor loop infinite loop by using inser into通过使用插入到光标循环无限循环
【发布时间】:2011-08-28 23:04:32
【问题描述】:

我想用光标插入数据。

ALTER PROCEDURE [dbo].[VehBlocMajStatut] 
-- Add the parameters for the stored procedure here
@NO_Veh int,
@Statut int

AS
BEGIN

DECLARE @Temp_appel int
DECLARE appel_cursor CURSOR FOR 
SELECT NO_APPEL FROM ESPMEDS_LS_APPVEH WHERE NO_VEHICULE = @NO_Veh

OPEN appel_cursor;

FETCH NEXT FROM appel_cursor INTO @Temp_appel;

WHILE @@FETCH_STATUS = 0
BEGIN
    INSERT INTO ESPMEDS_LS_APPVEH (NO_VEHICULE, NO_APPEL, STATUT, DATEVEH)
    VALUES (@NO_Veh, @Temp_appel, @Statut, GETDATE())

    FETCH NEXT FROM appel_cursor INTO @Temp_appel;


END
close appel_cursor
deallocate appel_cursor
END

不幸的是,它变成了无限循环。当我评论INSERT INTO 子句时,它可以正常工作。

如何使用光标进行插入?

【问题讨论】:

    标签: sql-server-2008 cursor infinite-loop insertion


    【解决方案1】:

    不需要光标。

    INSERT INTO ESPMEDS_LS_APPVEH 
        (NO_VEHICULE, NO_APPEL, STATUT, DATEVEH)
        SELECT @NO_Veh, NO_APPEL, @Statut, GETDATE()
            FROM ESPMEDS_LS_APPVEH 
            WHERE NO_VEHICULE = @NO_Veh
    

    【讨论】:

    • 但只是出于好奇,为什么使用光标不起作用?光标不能与插入一起使用,因为我与更新一起使用,我没有问题。或者在循环内我调用另一个执行 Insert 的 strore 过程?
    • @user609511: 1) 由于此答案解决了您的问题,请单击旁边的复选标记接受它。 2)因为您没有将游标声明为STATIC,所以您在循环中执行的插入添加到游标的结果集中,因此是无限循环。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多