与(nolock)或(nolock) - 有区别吗?

Rob*_*Rob 42 sql sql-server select nolock sql-server-2008-r2

一切都基于这样的假设,即(nolock)完全适合于这种情况.已经有很多问题争论是否与(nolock)一起使用.

我环顾四周,无法找到使用之间是否存在实际差异with(nolock):

select customer, zipcode from customers c with(nolock) 
Run Code Online (Sandbox Code Playgroud)

或者只是(nolock):

select customer, zipcode from customers c (nolock) 
Run Code Online (Sandbox Code Playgroud)

这两者之间是否存在功能差异?文体?
一个比另一个年长,有可能被弃用吗?

Aar*_*and 53

没有功能差异,但最终语法WITH不会起作用.这已被弃用:

select customer, zipcode from customers c (nolock) 
Run Code Online (Sandbox Code Playgroud)

所以你应该使用这种格式:

select customer, zipcode from customers c with (nolock) 
Run Code Online (Sandbox Code Playgroud)

WITH至少从SQL Server 2008开始,不再使用表提示的关键字.在以下主题中搜索短语Specifying table hints without using the WITH keyword.:

http://msdn.microsoft.com/en-us/library/ms143729%28SQL.100%29.aspx

(nolock当然,关于你是否应该使用的讨论是独立的.我在这里发表了关于它们的博客.)


小智 6

虽然我们没有找到(nolock)和with(nolock)之间的区别... with(nolock)在SQL Server 2000版本中不起作用.

我还注意到,当你尝试从链接服务器中提取数据时,只有'(nolock)'不起作用,而你应该使用'with(nolock)'.

-- this will not work 
select * from server1.DB1.dbo.table1 (nolock)

-- this will  work 
select * from server1.DB1.dbo.table1 with (nolock)
Run Code Online (Sandbox Code Playgroud)


Jim*_*m B 5

这实际上取决于您所使用的SQL Server版本。

查看有关SQL Server 2012 的最新文档,提示省略WITH是不推荐使用的功能。因此虽然from customers c (nolock)可能会起作用;你应该真的在用from customers c WITH (nolock)

注意这与from customers nolock; 其中,nolock将用作表别名。

功能上 他们看起来是一样的。