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

时间:2012-08-24 16:01:08

标签: sql sql-server select sql-server-2008-r2 nolock

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

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

select customer, zipcode from customers c with(nolock) 

或只是(nolock)

select customer, zipcode from customers c (nolock) 

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

4 个答案:

答案 0 :(得分:51)

没有功能差异,但最终没有WITH的语法将无效。这已被弃用:

select customer, zipcode from customers c (nolock) 

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

select customer, zipcode from customers c with (nolock) 

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

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

(当然,关于你是否应该使用nolock的讨论是分开的。I've blogged about them here。)

答案 1 :(得分:5)

虽然我们没有找到(nolock)和(nolock)之间的区别...使用(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)

答案 2 :(得分:3)

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

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

请注意,这与from customers nolock不同;其中nolock将作为表别名。

功能;它们看起来是一样的。

答案 3 :(得分:2)

我尝试了170000+数据行结果,但是我没有看到任何差异通过查询执行计划。两者都以相同的方式工作。