我可以使用TRAN& ROLLBACK进行打印预览吗?

时间:2012-01-18 09:51:42

标签: sql sql-server tsql

我正在为已经存在的报告撰写“预览”。现在编程时,生成报告会更改数据库(它会为订单生成发票,然后生成报告)。 现在我需要一种方法来生成报告而不更改数据库。 生成发票比删除它更容易,所以我在考虑这些问题:

  1. 启动交易
  2. 制作发票
  3. 将数据读入对象(数据集)
  4. 回滚交易
  5. 要报告的Feed数据集
  6. 这是一个好方法吗?我问,因为它似乎不像是使用交易的正确方式。

    谢谢大家!!!

2 个答案:

答案 0 :(得分:6)

这不是一个明智的解决方案。您将在表上创建锁并不必要地破坏日志。整个想法似乎非常不可扩展。

您是否可以重新编码以将GenerateInvoiceGenerateReport代码分隔为单独的存储过程?然后单独调用它们还是添加另一个DoBoth存储过程?

答案 1 :(得分:2)

正如Dems所说,不建议使用交易。

我将用于此类问题的方法通常是将Param添加到我的StoredProc中以了解它是否为预览。

我会做相同的操作,但是如果它是一个插入或更新新行的存储过程,我会将相关数据拉入#TemporaryTable并编辑该数据而不是直接编辑真实表。

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