关于事务以及 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
在后台这个基本是垃圾,不要期待它象前台那样