我能否在打印预览中使用TRAN&ROLLBACK?

3
我正在为一个已经存在的报告撰写“预览”。按照目前的程序,生成报告会更改数据库(它会为订单生成发票,然后生成报告)。 现在我需要一种方法来生成报告而不更改数据库。 生成发票比删除发票要容易,所以我考虑了以下方式:
  1. 开始交易
  2. 生成发票
  3. 将数据读入对象(数据集)
  4. 回滚交易
  5. 将数据集传递给报告
这是一个好的方法吗?我之所以问,是因为它似乎并不是使用事务的正确方式。
非常感谢大家!
2个回答

6

这不是一个可行的解决方案。你会在表上创建锁并不必要地刷日志。整个想法似乎非常不可扩展。

你可以重新编码,将GenerateInvoiceGenerateReport代码分成单独的存储过程。然后要么单独调用它们,要么添加另一个DoBoth存储过程。


同意。如果有人在这个时候想要生成发票,我不敢想象会发生什么。 - ChrisBD
1
谢谢!我会采取另一种方法。尝试分割代码似乎是一个不错的方式,但在打印之前我需要生成发票。我想我需要一种方法在此之后彻底删除所有痕迹! - Ward

2

正如Dems所提到的,对于这种情况不建议使用事务。

我通常在处理这类问题时会向我的存储过程中添加一个参数来确定它是预览还是实际操作。

我会执行相同的操作,但如果是插入或更新新行的存储过程,我会将相关数据提取到#TemporaryTable中,并编辑那些数据而不是直接编辑真实表格。

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


+1 我以前使用过这种方法,它更可取。 - Rich Andrews
这正是我所做的!谢谢大家! - Ward

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接