日期:2014-05-19  浏览次数:20787 次

关于事务以及 begin try ... try catch 的问题。
一个简单的存储过程:
=====================================================
ALTER   PROCEDURE   [dbo].[InsertTestAndTestChar]
        @Char   CHAR(1)
AS
BEGIN

        BEGIN   TRANSACTION

        BEGIN   TRY

        INSERT   INTO   [Test]
        (
                [Code]
        )
        VALUES
        (
                @Char
        )

        INSERT   INTO   [_TestChar]
        (
                [Code]
        )
        VALUES
        (
                @Char
        )

        COMMIT

        END   TRY

        BEGIN   CATCH

                ROLLBACK

        END   CATCH

END

我帮意将表名   TestChar   改为   _TestChar   引起存储过程执行出错。报错如下:

(1   row(s)   affected)
Msg   208,   Level   16,   State   1,   Procedure   InsertTestAndTestChar,   Line   24
Invalid   object   name   '_TestChar '.
Msg   266,   Level   16,   State   2,   Procedure   InsertTestAndTestChar,   Line   24
Transaction   count   after   EXECUTE   indicates   that   a   COMMIT   or   ROLLBACK   TRANSACTION   statement   is   missing.   Previous   count   =   1,   current   count   =   2.

(1   row(s)   affected)

最后一个错是什么意思?为什么会报那个错?我已经   try   catch   了,为什么还是会报出岂常?我并没有在   try   catch   模块里面抛出异常啊。

------解决方案--------------------
说明没有_TestChar这张表,严重异常错误,编译器会自动抛出
------解决方案--------------------
另外, 像表不存在这样的严重错误, TRY ... CATCH 是处理不到的, 这点在联机帮助上有说明.
------解决方案--------------------
大版主已经说过了:

像表不存在这样的严重错误, TRY ... CATCH 是处理不到的
------解决方案--------------------
TRY ... CATCH
在后台这个基本是垃圾,不要期待它象前台那样