我不经常使用存储过程,并且想知道在事务中包装我的选择查询是否有意义。
我的程序有三个简单的选择查询,其中两个使用第一个的返回值。
答案 0 :(得分:44)
在高度并发的应用程序中,它(理论上)可能会在执行其他选择之前修改您在第一个选择中读取的数据。
如果您的应用程序中可能出现这种情况,您应该使用事务来包装您的选择。确保选择正确的isolation level,但并非所有事务类型都保证一致的读取。
更新: 您还可以在并发更新/插入解决方案(也称为upsert)上找到this article。它为测试提供了几种常见的upsert方法,以确定在select和下一个语句之间没有修改实际保证数据的方法。结果,令人震惊,我会说。
答案 1 :(得分:4)
交易通常在您拥有CREATE
,UPDATE
或DELETE
语句并且您希望拥有原子行为时使用,即提交所有内容或不提交任何内容。
但是,您可以将READ
选择语句的交易用于:
确保在执行一系列精选查询时,没有其他人可以更新感兴趣的表格。
看看这个msdn post。