我想创建一个基于一些参数执行某些工作的存储过程。这是破坏性的工作,其中一个参数是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>,我是否应该使用单独的代码块来实现日志记录
答案 0 :(得分:0)
我过去曾使用过这种设计,以便能够对存储过程进行单元测试。此方法允许在不实际更改数据的情况下验证行计数。但是,我建议您将@ReallyDoIt
默认为Y
,以便存储过程在部署后始终正常运行。您还应确保在事务内部不做太多工作,因为这会导致事务日志负载过重,并会锁定正在更新的表。