子查询的WTH(NOLOCK)语法

时间:2017-06-16 15:30:10

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

我试图在报告查询中添加(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) shuold放在哪里?

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

谢谢!

3 个答案:

答案 0 :(得分:2)

如果涉及更多的表并且多个查询被激活并且您不关心脏读,那么将事务的隔离级别设置为read uncommited而不是写入<{1}}无处不在

Nolock

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

但是如果你继续死机,表格提示就属于桌子旁边。当然,因为这是一种观点,所以它不会有太大帮助。

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