2012-01-18 28 views
3

我正在为已经存在的报告写'预览'。由于现在已编程,生成报告会更改数据库(它会生成订单的发票,然后生成报告)。 现在我需要一种方法来生成报告而不更改数据库。 生成发票是不是删除它更容易,所以我这样的思考:我可以使用TRAN&ROLLBACK进行打印预览吗?

  1. 开始交易
  2. 化妆发票
  3. 数据读入的对象(数据集)
  4. ROLLBACK TRANSACTION
  5. 饲料要报告的数据集

这是一个好方法吗?我问,因为它似乎不像使用交易的正确方式。

谢谢大家!

回答

6

这不是一个可取的解决方案。您将在表上创建锁并不必要地抨击日志。整个想法看起来非常难以捉摸。

您可以重新编码以将GenerateInvoiceGenerateReport代码分隔为单独的存储过程吗?然后分别打电话给他们或添加另一个DoBoth存储过程?

+0

同意。讨厌想想如果有人真的想在发生这种情况时生成发票,会发生什么。 – ChrisBD 2012-01-18 09:57:58

+1

谢谢!我会采取另一种方法。尝试拆分代码看起来是一种好方法,但在打印之前我需要生成发票。我会需要一种方法来删除它后面的每一个痕迹! – Ward 2012-01-18 10:10:05

2

正如Dems所述,建议不要使用事务。

我将用于解决这类问题的方法通常是向我的StoredProc添加一个Param以知道它是否是预览。我会做相同的操作,但是如果它是一个插入或更新新行的存储过程,我会将相关数据放入一个#TemporaryTable中,并将编辑该数据,而不是直接编辑实际表。

在我的过程结束时,我只是检查是否预览,如果我们不预测,我会从#TemporaryTable插入/更新新行。

+0

+1我以前用过这个方法,而且更可取 – 2012-01-18 19:28:55

+0

这就是我做到的!感谢大家! – Ward 2012-01-30 08:16:44