0

我在 SQL Server 2005 中这样做。我有一个表,只有一个 int 类型的列,你不能在其中插入 char。

DECLARE @intErrorCode INT

BEGIN TRAN
Update TestTable set A='a' where A=3 --UPDATE TO CHAR, FAIL

SELECT @intErrorCode = @@ERROR
IF (@intErrorCode <> 0) GOTO PROBLEM

COMMIT TRAN

PROBLEM:
IF (@intErrorCode <> 0) BEGIN
PRINT 'Unexpected error occurred!'
ROLLBACK TRAN
END

我期待看到“发生意外错误!” 结果。但我实际看到的是:将 varchar 值“a”转换为数据类型 int 时转换失败。

似乎我的 SQL Server 根本没有将我的代码作为事务......它击中了失败线并在那之后立即退出运行。

我在这里做错了什么?

4

1 回答 1

2

首先使用 Try catch 块代替。

但是,没有 sql 错误捕获适用于所有类型的错误。

在联机丛书中阅读有关使用 try catch 块处理错误的内容,您将看到关于哪些类型的错误未被捕获的讨论。

此外,返回实际错误通常比返回一般消息更好。当您知道真正的错误时,更容易追踪错误问题。

于 2012-05-07T22:19:22.220 回答