我知道with(nolock)(nolock)是相同或几乎相同的。 REF:with(nolock) or (nolock) - Is there a difference?
但是nolock呢?您可以在select中使用它们中的任何一个,而我看到的唯一显着区别是使用可写的别名时:select * from table1 as mytable with(nolock)或者select * from table1 as mytable (nolock)但是你不能写:select * from table1 as mytable nolock PS :我不是在这里讨论nolock是好是坏:)

最佳答案

不同之处在于您应该使用语法WITH (NOLOCK)(或WITH (<any table hint>))。为什么?

  • 不推荐使用WITH。从Table Hints on MSDN:

  • from table1 nolock根本不应用任何提示-这是一个别名。例如:
    SELECT nolock.name FROM sys.objects nolock ORDER BY nolock.name;
    

    注意,我可以使用nolock作为别名。这里没有任何提示。
  • from table1 as mytable nolock在现代版本的SQL Server中是无效的语法。


  • 您还应该考虑使用 session 级提示SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED,因为这样您就不会遇到上面的语法问题,并且也不会浪费15个WITH (NOLOCK)来填充查询。这些使得以后很难用不同的隔离级别替换(例如RCSI,它比READ UNCOMMITTED IMHO实用得多),而单个批处理级别的语句很容易替换。

    另外,这对其他读者而言比对OP而言更重要,因此请绝对确保您了解使用NOLOCK的风险,其中包括在不存在的单行中获取损坏的数据:
  • Bad habits : Putting NOLOCK everywhere
  • The Read Uncommitted Isolation Level (Paul White)
  • 关于sql - with(nolock),(nolock),nolock的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21119880/

    10-11 08:32