2014-01-23 203 views
1

我刚刚发现通过从BEGIN TRAN t1ROLLBACK TRAN t1对中调用存储过程来测试存储过程的想法。
我有点害怕这个。 这是一种常见的做法吗?它可靠吗?
我的目标是要快速测试存储过程,读取和更新2个数据库(相同的服务器)。 SP不会执行任何截断,但会使用与INSERT.. OUTPUT语句结合的表变量。
音量会很低(少于1000行受影响)。 感谢使用事务回滚进行测试

+2

我经常这样做,并且从来没有遇到过问题。 – JohnD

+0

@JohnD:谢谢。我只是“贬低”这个,看起来像一个不错的时间表 –

+0

就目前而言,是的。它只是表明存储过程不会抛出错误。这并不表明他们做对了。如果他们什么都不做,他们会通过这些测试。 –

回答

2

有几件事情可能出错:

  • 的PROC可以做自己的事务管理
  • 它可以执行非事务性之类的语句CREATE DATABASE
  • 它可能有一个错误,导致事务自动回滚。如果PROC然后继续以某种方式运行时,它可能会写东西事务
  • XACT_ABORT之外可能使用不一致,导致前面提到的效果

在一般情况下,这是一个很好的技术,但。

截断交易,顺便说一句。

+1

upvoted和+1为截断,因为有一个神话截断表不能回滚 – jean

+0

@jean这就是为什么我说。我不知道这个神话是从哪里来的。 DROP TABLE也被处理。所有TRUNCATE都会将b-tree根设置为空白页面,并在提交时解除其余部分。 B树根可以很容易地回滚。 – usr

相关问题