我可以在提交事务之前返回SQL过程吗?

时间:2017-09-18 11:41:34

标签: sql sql-server sql-server-2008

我可以在sql事务过程中使用return语句吗?

Sql程序

ALTER PROCEDURE [dbo].[uspProcessStudentRecord] 
AS 
Begin Transaction
insert into dbo.Student(name,address) values('ABC','INDIA'); 
return; 
Commit Transaction 

在交易中写回报是一种好习惯吗?

3 个答案:

答案 0 :(得分:2)

  

在交易中写回报是一种好习惯吗?

没有。实际上,您将收到此SQL Server错误,并且该事务将保持未提交状态:

  

EXECUTE之后的事务计数表示不匹配的数量   BEGIN和COMMIT语句。先前的计数= 0,当前计数= 1。

在存储过程中启动事务时,最佳做法是在返回之前COMMITROLLBACK。此外,最好在procs中使用显式事务指定SET XACT_ABORT ON,以避免在超时后无意中使事务处于打开状态。

答案 1 :(得分:1)

回滚事务将撤消它。 如果你没有先提交它,它将无效。 但是,除非你打算使用try catch或其他声明,否则我在你的陈述中没有看到你正在做的事情。

答案 2 :(得分:0)

如果您确实希望能够提交即使事务被回滚(并且我能想到的唯一可行原因是用于记录目的),还有几个选项可供您使用:

  1. 将Service Broker与事件通知link
  2. 一起使用
  3. 使用指向相同数据库实例的链接服务器,而不使用分布式事务促销 - 这将在完全隔离的事务中提交。
  4. 但请首先重新考虑这是否是您真正需要做的事情!