当前位置:  开发笔记 > 数据库 > 正文

SQL Server批处理错误处理问题

如何解决《SQLServer批处理错误处理问题》经验,为你挑选了1个好方法。



1> gbn..:

在这种情况下,您的'ABS'是批量中止,因为它是一个CAST错误.在这里解释,在Erland Sommarskog的精彩文章中

你必须阅读这篇文章.比你需要了解的SQL错误处理更多.

此外,您必须测试每个语句.如果第一个INSERT失败,你仍然继续执行(除非你有XACT_ABORT ON.

BEGIN TRAN

CREATE TABLE TempTable (c1 INT NULL)

INSERT INTO TempTable (c1) SELECT 1
IF @@ERROR <> 0
    GOTO errhandler

INSERT INTO TempTable (c1) SELECT 'ABS'
IF @@ERROR <> 0
    GOTO errhandler

PRINT 'no error'
COMMIT TRAN
GOTO exitpoint

errhandler:
PRINT 'error' -- Why does it never get here???????
ROLLBACK TRAN

exitpoint:

如果您有SQL Server 2000,那么除了添加更多检查,ISNUMERIC等之外,您没有很多选项.

如果您有SQL Server 2005,那么您应该真正使用新技术.几乎所有代码和执行错误都被清楚地捕获.

BEGIN TRY
    BEGIN TRAN

    CREATE TABLE TempTable (c1 INT NULL)

    INSERT INTO TempTable (c1) SELECT 1

    INSERT INTO TempTable (c1) SELECT 'ABS'

    PRINT 'no error'
    COMMIT TRAN
END TRY
BEGIN CATCH
    PRINT 'error' --It will get here for SQL 2005
    ROLLBACK TRAN
END CATCH

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有