我们可以在与其他表连接的update语句中使用(nolock)编写

时间:2013-02-26 07:56:52

标签: sql tsql

我有两个表,比如说Main,事务表

主要:

mainID Name  Active
1  sharath  1
2  kiran    0
3  ashish   1

交易:

TransID TransType status MainID IsActive
101      D         22    1       0
102      R         27    2       1
103      R         32    2       1
104      D         11    1       0
105      R         43    3       0

这些更新语句更可取:

1)

Update TR
set  status  = 0,
     Isactive = 0
from Transaction TR
inner join main MN with(nolock) on MN.MainID = TR.MainID 
where MN.Isactive = 0

2)

Update TR
set  status  = 0,
     Isactive = 0
from Transaction TR
inner join main MN on MN.MainID = TR.MainID 
where MN.Isactive = 0

在第一个查询中,我使用Main进行了内连接,并使用了with(nolock),因为我想更新那些Isactive = 0

的MainID的记录

在第二个查询中,没有使用with(nolock)我写了更新语句。

哪一个是可取的,n将来也会做更新而没有任何错误。

1 个答案:

答案 0 :(得分:1)

在SELECT中使用NOLOCK将返回数据,这可能是脏的。当我们确定脏数据没问题时,我们可以使用此表提示快速获得结果。但是我没有看到为什么人们应该在DML上使用NOLOCK的原因,因为脏数据可能会被写入db并且也会被提交。 主表中未提交的事务可能会将脏数据引入Transaction表。