微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – 使用SQL Server T-SQL错误处理的最佳实践是什么?

我们有一个主要用sql Server 7.0编写的大型应用程序,其中所有数据库调用都是存储过程.我们现在运行sql Server 2005,它提供了更多的T-sql功能.

在几乎所有SELECT,INSERT,UPDATE和DELETE之后,@@ ROWCOUNT和@@ ERROR被捕获到局部变量中并评估问题.如果出现问题,请执行以下操作:

>错误消息输出参数已设置
>回滚(如有必要)完成
> info被写入(INSERT)到日志表
>返回错误编号,此程序是唯一的(如果是致命的,则是肯定的,否定是警告)

它们都不检查行(仅当它已知时),并且一些不同的日志/调试信息或多或少.此外,行逻辑是从错误逻辑拆分的某些时间(在更新中,在WHERE子句中检查并发字段,rows = 0表示其他人已更新数据).但是,这是一个相当通用的例子:

SELECT,UPDATE,or DELETE

SELECT @Error=@@ERROR,@Rows=@@ROWCOUNT
IF @Rows!=1 OR @Error!=0
BEGIN
    SET @ErrorMsg='ERROR 20,' + ISNULL(OBJECT_NAME(@@PROCID),'unkNown') 
                               + ' - unable to ???????? the ????.'
    IF @@TRANCOUNT >0
    BEGIN 
        ROLLBACK
    END

    SET @LogInfo=ISNULL(@LogInfo,'')+'; '+ISNULL(@ErrorMsg,'')+
        + ' @YYYYY='        +dbo.FormatString(@YYYYY)
        +',@XXXXX='        +dbo.FormatString(@XXXXX)
        +',Error='         +dbo.FormatString(@Error)
        +',Rows='          +dbo.FormatString(@Rows)

    INSERT INTO MyLogTable (...,Message) VALUES (....,@LogInfo)

    RETURN 20

END

我正在考虑用TRY-CATCH T-sql替换我们如何做到这一点.我已经阅读了有关TRY…CATCH (Transact-SQL)语法的内容,所以不要只发布一些摘要.我正在寻找任何好的想法,以及如何最好地做或改进我们的错误处理方法.它不一定是Try-Catch,只是任何使用T-sql错误处理的好或最佳实践.

解决方法

你应该读这个:

http://www.sommarskog.se/error-handling-I.html

我不能足够推荐这个链接.这有点长,但是好的方式.

前面有一个免责声明,它最初是为sql Server 2000编写的,但它也涵盖了sql Server 2005中新的try / catch错误处理能力.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐