Поймать и продолжить в SQLServer

У меня есть эта процедура sql:

create procedure DELETE as
DECLARE VARIABLES
begin TRY
DECLARE CURSOR FOR SELECT ANYTHING
OPEN CURUPD 
FETCH NEXT FROM CURUPD INTO VARIABLES
WHILE @@FETCH_STATUS = 0 BEGIN  
    UPDATE TABLE BASED SON VARIABLES
FETCH NEXT FROM CURUPD INTO VARIABLES
END 
CLOSE CUR
DEALLOCATE CUR
end TRY
begin catch
 DO NOT CARE ABOUT THE ERROR BUT CONTINUE UPDATE ON NEXT RECORD
end catch;

Это возможно? Роберт :-)

sql-server-2008,stored-procedures,

1

Ответов: 3


2 принят

Вам нужно будет установить TRY / CATCH внутри цикла WHILE. Как вы это делаете, вы не можете продолжить цикл WHILE, потому что он уже закончен.


1

Попробуйте этот код:

create procedure DELETE as
DECLARE VARIABLES
begin TRY
DECLARE CURSOR FOR SELECT ANYTHING
OPEN CURUPD 
FETCH NEXT FROM CURUPD INTO VARIABLES
WHILE @@FETCH_STATUS = 0 BEGIN  
    UPDATE TABLE BASED SON VARIABLES
FETCH NEXT FROM CURUPD INTO VARIABLES
END 
CLOSE CUR
DEALLOCATE CUR
end TRY
begin catch
 FETCH NEXT FROM CURUPD INTO VARIABLES
 continue
end catch;

0

некоторые ошибки не являются ловушками и прервут пакет даже с помощью try и catch, вы можете проверить XACT_STATE (), а затем определить, что делать

Зачем вам нужен курсор, вы не можете сделать обновление на основе SET? Кроме того, ваша попытка находится за пределами цикла, но у вас все еще будет такая же проблема, попробуйте обновить int colum, n с помощью «A» .... BOOM!

SQL-сервер 2008, хранимая-процедура,
Похожие вопросы
Яндекс.Метрика