子查询的 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
我正在尝试在报告查询中添加 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