ROLLBACK TRANSACTION用作撤消

时间:2016-01-27 16:35:13

标签: sql-server

我想创建一个基于一些参数执行某些工作的存储过程。这是破坏性的工作,其中一个参数是ReallyDoIt(Y / N)

我想做的是像这样创建过程

create proc DoSomething @ParamOne int, @ReallyDoIT char(1)
as
begin
 begin try
  begin transaction
  do stuff
  get logging info
  do some more stuff
  add to the logging info
  etc....
  if @ReallyDoIt = 'Y' COMMIT Transaction
  else ROLLBACK TRAN
END TRY
BEGIN CATCH
 IF @@trancount >0 ROLLBACK TRAN
end catch

我正在专门研究这是否适合存储过程。如果我这样做的话,有什么我想念的东西还是可以用的。

是否存在使用此方法失败或在数据中产生不需要的结果的情况。如果@ReallyDoIt为'N'<​​/ p>,我是否应该使用单独的代码块来实现日志记录

1 个答案:

答案 0 :(得分:0)

我过去曾使用过这种设计,以便能够对存储过程进行单元测试。此方法允许在不实际更改数据的情况下验证行计数。但是,我建议您将@ReallyDoIt默认为Y,以便存储过程在部署后始终正常运行。您还应确保在事务内部不做太多工作,因为这会导致事务日志负载过重,并会锁定正在更新的表。