1

我的测试表有两列:

id         int not null  
somecolumn varchar(10))

现在看看我的查询:

USE TRY
BEGIN TRANSACTION T1
INSERT INTO Test VALUES(7,'hi');
GO
INSERT INTO Test VALUES(8,'hi','ABC');
GO
PRINT @@ERROR
if @@ERROR>0
    ROLLBACK TRANSACTION T1
ELSE
    COMMIT TRANSACTION T1

我知道我的第二个查询是错误的,所以我希望事务回滚,但它插入第一个查询然后显示此消息:

(1 row(s) affected)  
Msg 213, Level 16, State 1, Line 1
Column name or number of supplied values does not match table definition.
213
4

1 回答 1

0

正如 Benedikt 已经说过的,我们不能在 BEGIN 和 END 之间使用 GO。如果您从上述事务中删除 GO,则由于写入错误的插入语句,语句甚至无法编译。TRY..CATCH 也不起作用(如果您尝试在执行阶段捕获错误并回滚事务)。

于 2012-07-16T07:07:07.633 回答