对select语句使用事务?

时间:2011-05-12 18:19:00

标签: sql-server tsql stored-procedures

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

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

2 个答案:

答案 0 :(得分:44)

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

如果您的应用程序中可能出现这种情况,您应该使用事务来包装您的选择。确保选择正确的isolation level,但并非所有事务类型都保证一致的读取。

更新: 您还可以在并发更新/插入解决方案(也称为upsert)上找到this article。它为测试提供了几种常见的upsert方法,以确定在select和下一个语句之间没有修改实际保证数据的方法。结果,令人震惊,我会说。

答案 1 :(得分:4)

交易通常在您拥有CREATEUPDATEDELETE语句并且您希望拥有原子行为时使用,即提交所有内容或不提交任何内容

但是,您可以将READ选择语句的交易用于:
确保在执行一系列精选查询时,没有其他人可以更新感兴趣的表格。

看看这个msdn post