WTH (NOLOCK) syntax fo subquery

4.4k Views Asked by At

I am trying to add with (nolock) in a report query that when run locks the full db making imposssible for other users to use the db.

I can't figure out how to use in this case:

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

This gives syntax error:

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

where WITH (NOLOCK) shuold be put?

I am not saying this is a solution to all problems, it is just a test i want to.

Thanks!

3

There are 3 best solutions below

1
Pரதீப் On BEST ANSWER

If there are more tables involved and more than one query invloved and you don't care about dirty reads then set the Isolation level of your transaction to read uncommited instead of writing Nolock everywhere

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
0
Jesse On

I would put it here but the thing to note is you are using a view so really it should go on the tables in the view:

SELECT FIELDS FROM (SELECT * FROM MYVIEW WITH (NOLOCK)) AS SUB 
2
Sean Lange On

If you care about accuracy you shouldn't put it anywhere on your report. That hint has some very interesting things it does that many people don't fully understand. http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/

But if you are deadset on continuing, table hints belong next to the table. Of course since this is a view it isn't going to help much.

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