我有这个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;
这可能吗? 罗伯特: - )
答案 0 :(得分:2)
你必须把TRY / CATCH放在WHILE循环中。你拥有它的方式,你不能继续 WHILE循环,因为它已经完成了。
答案 1 :(得分: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;
答案 2 :(得分:0)
某些错误无法捕获并且即使尝试也会中止批处理,抓住您可以检查XACT_STATE()然后确定要执行的操作
为什么你需要一个光标你不能做一个基于SET的更新? 你的尝试也在循环之外,但你仍然会遇到同样的问题,尝试更新一个int colum,n用'A'.... BOOM!