5

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

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

谢谢!

4

3 回答 3

3

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

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
于 2017-06-16T15:42:15.290 回答
1

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

SELECT FIELDS FROM (SELECT * FROM MYVIEW WITH (NOLOCK)) AS SUB 
于 2017-06-16T15:32:57.587 回答
1

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

但是,如果您对继续进行死心塌地,则表格提示属于表格旁边。当然,由于这是一个视图,它不会有太大帮助。

SELECT FIELDS FROM (SELECT * FROM MYVIEW WITH (NOLOCK)) AS SUB
于 2017-06-16T15:34:34.740 回答