作业自动调用存储过程出错,怎样记录详细的错误信息?

zjl8008 2014-09-22 10:51:24
作业调用存储过程有时成功,有时失败,手工执行时每次都是成功的,所以不知道具体原因,只知道是哪个表插入失败。
存储过程内部有事务控制,所以事先把插入正式表的数据插入到临时表好像也会rollback吧?怎么记录下详细的错误原因或数据呢?插入前导出txt或excel?事务中是否可以?具体方法是什么?请指教?


存储过程简写,结构如下
create proc p_xxxx
as
--开始事务
begin tran
--执行插入语句1
--事务
SELECT @err = @@ERROR
if @err<>0
begin
rollback tran
--记录下错误日志
insert t_auto_cwf(rq,zxbz,nr,bz)
values(@rq,@err,'执行插入语句1失败',@zyls)
return
end
--执行插入语句2
--事务
SELECT @err = @@ERROR
if @err<>0
begin
rollback tran
--记录下错误日志
insert t_auto_cwf(rq,zxbz,nr,bz)
values(@rq,@err,'执行插入语句2失败',@zyls)
return
end

commit tran
...全文
196 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
發糞塗牆 2014-09-22
  • 打赏
  • 举报
回复
可以尝试按照这样的写法修改你的代码,并发那些错误信息插入一个实体表记录下来
BEGIN TRY
  SELECT 1/0 --This will raise a divide by zero error if not handled
END TRY
BEGIN CATCH
  SELECT ERROR_LINE() AS 'Line',
     ERROR_MESSAGE() AS 'Message',
     ERROR_NUMBER() AS 'Number',
     ERROR_PROCEDURE() AS 'Procedure',
     ERROR_SEVERITY() AS 'Severity',
     ERROR_STATE() AS 'State'
END CATCH;
發糞塗牆 2014-09-22
  • 打赏
  • 举报
回复
那应该是错误没有捕获的原因,你看看05有没有try/catch功能,我很久没搞05了
zjl8008 2014-09-22
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
如果是高版本SQL Server ,错误处理应该用try /catch搭配一系列的系统函数,
sql2005 sp3 版本
zjl8008 2014-09-22
  • 打赏
  • 举报
回复
引用 1 楼 DBA_Huangzj 的回复:
sql agent里面有明显的错误信息不?
没有,存储过程肯定是执行了的,因为在 t_auto_cwf表中有失败的记录,知道哪个表插入失败了,就是不知道为什么失败了
發糞塗牆 2014-09-22
  • 打赏
  • 举报
回复
如果是高版本SQL Server ,错误处理应该用try /catch搭配一系列的系统函数,
發糞塗牆 2014-09-22
  • 打赏
  • 举报
回复
sql agent里面有明显的错误信息不?
还在加载中灬 2014-09-22
  • 打赏
  • 举报
回复
引用 6 楼 DBA_Huangzj 的回复:
可以尝试按照这样的写法修改你的代码,并发那些错误信息插入一个实体表记录下来
BEGIN TRY
  SELECT 1/0 --This will raise a divide by zero error if not handled
END TRY
BEGIN CATCH
  SELECT ERROR_LINE() AS 'Line',
     ERROR_MESSAGE() AS 'Message',
     ERROR_NUMBER() AS 'Number',
     ERROR_PROCEDURE() AS 'Procedure',
     ERROR_SEVERITY() AS 'Severity',
     ERROR_STATE() AS 'State'
END CATCH;
05 有 TRY CATCH
吉普赛的歌 版主 2014-09-22
  • 打赏
  • 举报
回复
有些过于复杂的东西, 放在程序里处理更合适。 你可以建立一个 Windows 服务程序, 然后定时调用这个存储过程, 如果有错误则记到日志文件里。 当然, 你实在不愿意, 也可以像版主这样, 用try catch把错误信息放到一个错误日志表里。

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧