【问题标题】:Generic way to use SQL Server WITH NO LOCK使用无锁 SQL Server 的一般方法
【发布时间】:2012-04-08 11:46:55
【问题描述】:

当我更喜欢在特定大型存储过程中的所有 SQL 查询中使用 WITH (NOLOCK) 时,是否有一种通用方法可以将其用于所有特定存储过程语句,或者我应该对每个单独的查询使用 WITH (NOLOCK) ?

【问题讨论】:

  • 我可能错了,但这听起来像是过早的优化。
  • 这不只是优化,很可能导致应用出错。
  • @usr,我同意,但我真正指的是首先进行此类更改的动机,而不是关于这个特定的更改。

标签: sql-server tsql stored-procedures


【解决方案1】:

你可以设置Transaction Isolation Level

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITED

但是,不要忘记 NOLOCK 意味着您的查询可能会返回脏数据或重复数据,或者完全丢失数据。如果它适合您,我建议您研究 READ_COMMITTED_SNAPSHOT 数据库选项,以便在返回具有一致结果的查询时避免锁定问题。

【讨论】:

    【解决方案2】:

    您想使用以下语法:

    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
    

    我通过查看位于此处的 NOLOCK 表提示找到了这一点:http://msdn.microsoft.com/en-us/library/ms187373.aspx。 WITH(NOLOCK) 表提示等效于将隔离级别设置为 READ UNCOMMITTED。这是来自 MSDN (http://msdn.microsoft.com/en-us/library/ms187373.aspx) 的 sn-p:

    NOLOCK 相当于 READUNCOMMITTED。有关详细信息,请参阅本主题后面的 READUNCOMMITTED。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多