子查询的 WITH (NOLOCK) 语法

WTH (NOLOCK) syntax fo subquery

我正在尝试在报告查询中添加 with (nolock),当 运行 锁定整个数据库时,其他用户无法使用该数据库。

我不知道在这种情况下如何使用:

-- this is just an example:
SELECT FIELDS FROM (SELECT * FROM ATABLE) AS SUB

这给出了语法错误:

SELECT FIELDS FROM (SELECT * FROM ATABLE) WITH (NOLOCK) AS SUB

WITH (NOLOCK)应该放在哪里?

我并不是说这是解决所有问题的方法,这只是我想做的一个测试。

谢谢!

我会把它放在这里,但要注意的是你正在使用一个视图,所以它真的应该放在视图中的表上:

SELECT FIELDS FROM (SELECT * FROM MYVIEW WITH (NOLOCK)) AS SUB 

如果您关心准确性,则不应将其放在报告中的任何位置。这个提示有一些非常有趣的事情,但很多人并不完全理解。 http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/

但是如果您不想继续,table 提示位于 table 旁边。当然,由于这是一种观点,因此不会有太大帮助。

SELECT FIELDS FROM (SELECT * FROM MYVIEW WITH (NOLOCK)) AS SUB

如果涉及的表较多,涉及的查询不止一个,而且您不关心脏读,则将事务的隔离级别设置为read uncommited而不是到处写 Nolock

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED