Цикл курсора бесконечный цикл с использованием вставки в

#sql-server-2008 #cursor #infinite-loop #insertion

#sql-server-2008 #курсор #бесконечный цикл #Вставка

Вопрос:

Я хочу использовать курсор для вставки данных.

 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 предложение, оно работает нормально.

Как я могу выполнить вставку с помощью курсора?

Ответ №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
  

Комментарии:

1. Но просто из любопытства, почему с курсором не работает? Этот курсор нельзя использовать с insert, потому что я использую с Update, и у меня нет проблем. Или внутри цикла я вызываю другую процедуру strore, которая выполняет вставку?

2. @user609511: 1) Поскольку этот ответ решил вашу проблему, пожалуйста, примите его, нажав на галочку рядом с ним. 2) Поскольку вы не объявили свой курсор как STATIC , вставки, которые вы выполняли в цикле, добавлялись к результирующему набору курсора, отсюда и бесконечный цикл.