2016-11-06 55 views
0

在存储过程中,插入/更新后跟一个select(nolock)是否可以产生具有相同数据的意外结果?

可以插入/更新,然后在同一条记录上选择(nolock)会产生意外的结果吗?

我是否总是得到(完整)更新/插入记录?

在此先感谢您的帮助!

+1

如果你在意为什么要使用'NOLOCK'提示? –

+0

防止(b)锁定,但我们注意到一段时间内会出现一些奇怪的结果。有很多并发线程,都在独特的记录上运行(新的或更新的) – Gerard

+0

NOLOCK扫描期间的并行插入/更新活动可能导致行被遗漏或重复。最好打开READ_COMMITTED_SNAPSHOT数据库选项,除非应用程序依赖于悲观锁定。 –

回答

0

如果一切都通过单个进程完成,那么数据将是正确的。 但是,如果存储过程是从不同的进程ID调用的,并且用户在其他进程中正在执行select(nolock),那么select可能会发生数据差异。

由于存储过程可能仍在使用中。

+0

Thx Signh!有很多并发线程,都在独特的记录上运行(新的或更新的)。仍然没有问题? – Gerard

+0

理想情况下,nolock不应该使用读取,但是如果您将结果集绘制成图形或仪表板,并且您可以在显示胎面时承担一些差异,那么您可以使用nolock。 –

相关问题