CREATE PROC TEST AS BEGIN transaction BEGIN EXEC('语句1') EXEC('语句2') EXEC('语句3') EXEC('语句4') END IF @@ERROR<>0 BEGIN ROLLBACK transaction END ELSE BEGIN COMMIT transaction END GO
CREATE PROC TEST AS DECLARE @ERROR INT SET @ERROR = 0 BEGIN TRANSCATION EXEC('语句1') IF @@ERROR<>0 @ERROR = @@ERROR EXEC('语句2') IF @@ERROR<>0 @ERROR = @@ERROR EXEC('语句3') IF @@ERROR<>0 @ERROR = @@ERROR EXEC('语句4') IF @@ERROR<>0 @ERROR = @@ERROR IF @ERROR<>0 BEGIN ROLLBACK TRANSCATION END ELSE BEING COMMIT TRANSCATION END
TONY哥,用BEGIN END 放在一起错误号好像还是最后那个的为准吧
我的回答是错的.@@ERROR是每个语句执行完返回的, BEGIN END 放在一起错误号好像还是最后那个的为准没错.
CREATE TABLE TEST(TIME DATE) BEGIN TRANSACTION BEGIN EXEC('INSERT INTO TEST VALUES(GETDATE())') EXEC('INSERT INTO TEST VALUES(GETDATE())') EXEC('INSERT INTO TEST VALUES(''SSS'')') END IF @@ERROR<>0 BEGIN ROLLBACK TRANSACTION END ELSE BEGIN COMMIT TRANSACTION END BEGIN TRANSACTION BEGIN EXEC('INSERT INTO TEST VALUES(GETDATE())') EXEC('INSERT INTO TEST VALUES(''SSS'')') EXEC('INSERT INTO TEST VALUES(GETDATE())') END IF @@ERROR<>0 BEGIN ROLLBACK TRANSACTION END ELSE BEGIN COMMIT TRANSACTION END测试放在 begin 和 end 中可以啊
AS
BEGIN transaction
BEGIN
EXEC('语句1')
EXEC('语句2')
EXEC('语句3')
EXEC('语句4')
END
IF @@ERROR<>0
BEGIN
ROLLBACK transaction
END
ELSE
BEGIN
COMMIT transaction
END
GO
CREATE PROC TEST
AS
DECLARE @ERROR INT
SET @ERROR = 0
BEGIN TRANSCATION
EXEC('语句1')
IF @@ERROR<>0
@ERROR = @@ERROR
EXEC('语句2')
IF @@ERROR<>0
@ERROR = @@ERROR
EXEC('语句3')
IF @@ERROR<>0
@ERROR = @@ERROR
EXEC('语句4')
IF @@ERROR<>0
@ERROR = @@ERROR
IF @ERROR<>0
BEGIN
ROLLBACK TRANSCATION
END
ELSE
BEING
COMMIT TRANSCATION
END
BEGIN END 放在一起错误号好像还是最后那个的为准没错.
CREATE TABLE TEST(TIME DATE)
BEGIN TRANSACTION
BEGIN
EXEC('INSERT INTO TEST VALUES(GETDATE())')
EXEC('INSERT INTO TEST VALUES(GETDATE())')
EXEC('INSERT INTO TEST VALUES(''SSS'')')
END
IF @@ERROR<>0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END
BEGIN TRANSACTION
BEGIN
EXEC('INSERT INTO TEST VALUES(GETDATE())')
EXEC('INSERT INTO TEST VALUES(''SSS'')')
EXEC('INSERT INTO TEST VALUES(GETDATE())')
END
IF @@ERROR<>0
BEGIN
ROLLBACK TRANSACTION
END
ELSE
BEGIN
COMMIT TRANSACTION
END测试放在 begin 和 end 中可以啊