一切都是基于(nolock)完全适合这种情况的假设。已经有很多问题争论是否与(nolock)一起使用。
我环顾四周,无法找到使用with(nolock)
之间是否存在实际差异:
select customer, zipcode from customers c with(nolock)
或只是(nolock)
:
select customer, zipcode from customers c (nolock)
两者之间是否存在功能差异?文体?
一个比另一个年龄大,有可能被弃用吗?
答案 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+数据行结果,但是我没有看到任何差异通过查询执行计划。两者都以相同的方式工作。