Вам нужно будет установить TRY / CATCH внутри цикла WHILE. Как вы это делаете, вы не можете продолжить цикл WHILE, потому что он уже закончен.
У меня есть эта процедура 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,
Попробуйте этот код:
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;
некоторые ошибки не являются ловушками и прервут пакет даже с помощью try и catch, вы можете проверить XACT_STATE (), а затем определить, что делать
Зачем вам нужен курсор, вы не можете сделать обновление на основе SET? Кроме того, ваша попытка находится за пределами цикла, но у вас все еще будет такая же проблема, попробуйте обновить int colum, n с помощью «A» .... BOOM!