Sql server 使用无锁SQL Server的一般方法

Sql server 使用无锁SQL Server的一般方法,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,当我更喜欢在特定大型存储过程中的所有SQL查询中使用WITH(NOLOCK)时,是否有一种通用方法可用于所有特定存储过程语句,或者我应该在每个查询中使用WITH(NOLOCK) 但是,不要忘记NOLOCK意味着您的查询可能返回脏数据或重复数据,或者完全丢失数据。如果这是一个选项,我建议您研究READ_COMMITTED_SNAPSHOT数据库选项,以避免在返回结果一致的查询时出现锁定问题。您希望使用以下语法: SET TRANSACTION ISOLATION LEVEL READ UNCOMM

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


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

您希望使用以下语法:

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
我通过查看此处的NOLOCK表提示发现了这一点:。WITH(NOLOCK)表提示相当于将隔离级别设置为未提交读取。以下是MSDN()中的代码片段:


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

我可能错了,但这听起来像是过早的优化。这不仅仅是一个优化,它可能会使应用程序不正确。@usr,我同意,但我真正指的是在第一时间做出此类更改的动机,而不是关于这个特定的。
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED