对select语句使用事务?

cho*_*obo 43 t-sql sql-server stored-procedures

我不经常使用存储过程,并且想知道在事务中包装我的选择查询是否有意义.

我的过程有三个简单的选择查询,其中两个使用第一个的返回值.

Mar*_*len 46

在高度并发的应用程序中,它(理论上)可能会在执行其他选择之前修改您在第一个选择中读取的数据.

如果这是您的应用程序中可能发生的情况,您应该使用事务来包装您的选择.确保选择正确的隔离级别,但并非所有事务类型都保证一致的读取.

更新:您可能还会发现这篇文章并发更新/插入解决方案(又名UPSERT)有趣.它为测试提供了几种常见的upsert方法,以查看实际上保证在select和next语句之间不修改数据的方法.结果是令人震惊的我会说.


FIr*_*nda 5

交易通常用来当你有CREATEUPDATEDELETE语句,你想拥有原子的行为,那就是,无论是承诺的一切或承诺什么

但是,您可以对READselect语句使用事务来执行以下操作:
确保在执行一堆select查询时,没有其他人可以更新目标表。

看看这个msdn帖子

  • 您阅读链接了吗?“应用程序可以执行诸如获取锁之类的操作来保护SELECT语句的事务隔离级别。”这是一个很好的用例,因为OP声明它们在随后的查询中将一个select的结果用作参数。 (3认同)