我正在为一个已经存在的报告撰写“预览”。按照目前的程序,生成报告会更改数据库(它会为订单生成发票,然后生成报告)。
现在我需要一种方法来生成报告而不更改数据库。
生成发票比删除发票要容易,所以我考虑了以下方式:
非常感谢大家!
- 开始交易
- 生成发票
- 将数据读入对象(数据集)
- 回滚交易
- 将数据集传递给报告
非常感谢大家!
这不是一个可行的解决方案。你会在表上创建锁并不必要地刷日志。整个想法似乎非常不可扩展。
你可以重新编码,将GenerateInvoice
和GenerateReport
代码分成单独的存储过程。然后要么单独调用它们,要么添加另一个DoBoth
存储过程。
正如Dems所提到的,对于这种情况不建议使用事务。
我通常在处理这类问题时会向我的存储过程中添加一个参数来确定它是预览还是实际操作。
我会执行相同的操作,但如果是插入或更新新行的存储过程,我会将相关数据提取到#TemporaryTable中,并编辑那些数据而不是直接编辑真实表格。
在我的过程结束时,我只需检查是否正在预览,如果不是,则从#TemporaryTable中插入/更新新行。