ROLLBACK SQL事务时停止执行

时间:2010-08-05 20:14:16

标签: sql sql-server tsql

一旦我在T-SQL中回滚事务,有没有办法停止执行代码?例如,在下面的代码中,我想要打印“消息1”,而不是“消息2”。

BEGIN TRANSACTION
GO
PRINT 'Message 1'
ROLLBACK TRANSACTION
GO
PRINT 'Message 2'
GO

3 个答案:

答案 0 :(得分:5)

GO语句将批处理分开,这意味着即使第一个错误,下一批也会运行。我假设(你知道这意味着什么......),如果你有错误,你试图规避。

您可以查看GOTO,并有一个错误处理块。或者你可以RETURN;但是,这需要在同一个GO

示例:

GO
  return
  SELECT 'Test 1'
GO
  SELECT 'Test 2'
GO

仍将返回测试2,但不会返回测试1。

答案 1 :(得分:3)

除了Mike关于GO关键字的陈述,您可以尝试这样的事情

BEGIN TRY
 Begin Transaction
  print 'Message1'
  Select 1/0 --throws error
 Commit Transaction
 print 'Message2'
END TRY
BEGIN CATCH
 rollback transaction
END CATCH

答案 2 :(得分:0)

如果它在SP或类似物中,您可以使用RETURN