49

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

我环顾四周,无法找到 using 之间是否存在实际区别with(nolock)

select customer, zipcode from customers c with(nolock) 

或者只是(nolock)

select customer, zipcode from customers c (nolock) 

两者在功能上有区别吗?风格?
一个比另一个旧并且有可能被弃用?

4

4 回答 4

62

没有功能上的区别,但最终没有的语法WITH将不起作用。这已被弃用:

select customer, zipcode from customers c (nolock) 

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

select customer, zipcode from customers c with (nolock) 

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的讨论是分开的。我在这里写过关于它们的博客。)

于 2012-08-24T16:07:34.240 回答
7

虽然我们没有发现 (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)
于 2013-12-18T19:32:16.903 回答
6

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

查看 SQL Server 2012表提示省略的最新文档WITH是一项已弃用的功能。所以 whilefrom customers c (nolock)可能会起作用;你真的应该使用from customers c WITH (nolock)

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

功能上;他们似乎是一样的。

于 2012-08-24T16:06:57.067 回答
2

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

于 2013-11-18T13:35:40.527 回答