2017-06-16 2 views
3

Ich versuche, mit (Nolock) in einer Berichtabfrage hinzufügen, dass bei Ausführung sperrt die vollständige db macht unmöglich für andere Benutzer die db verwenden.WTH (NOLOCK) -Syntax für Unterabfrage

Ich kann nicht herausfinden, wie in diesem Fall verwenden:

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

Dies gibt Syntaxfehler:

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

wo WITH (NOLOCK) gesetzt werden shuold?

Ich sage nicht, das ist eine Lösung für alle Probleme, es ist nur ein Test, den ich will.

Danke!

Antwort

2

Wenn es mehr Tische sind beteiligt und mehr als eine Abfrage invloved und Sie kümmern sich nicht um Dirty Reads stellen Sie dann die Isolationsstufe Ihrer Transaktion zu read uncommited statt Nolock schreiben überall

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
+0

in meinem Kontext, wenn vor der SELECT-Anweisung ich diesen Befehl schreibe, erhalte ich das gleiche Ergebnis - ich habe gerade einen Test gemacht. Vielen Dank. – LaBracca

1

würde ich es hier setzen, aber das, was zu beachten ist, dass Sie eine Ansicht verwenden, um wirklich auf den Tischen in der Ansicht gehen sollte:

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

Wenn Sie Genauigkeit kümmern sollten Sie es nicht setzen überall auf Ihrem Bericht. Dieser Hinweis hat einige sehr interessante Dinge, die viele Menschen nicht vollständig verstehen. http://blogs.sqlsentry.com/aaronbertrand/bad-habits-nolock-everywhere/

Aber wenn Sie nicht weitermachen, gehören Tabellenhinweise neben der Tabelle. Natürlich, da dies eine Ansicht ist, wird es nicht viel helfen.

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

Danke. Ich habe das Beispiel mit ATABLE anstelle von MYVIEW geändert, jetzt ist die Syntax gut, danke. Ich jetzt über die Risiken von keine Sperre, aber in meinem Kontext weiß ich, dass es ein akzeptables Risiko ist, wegen des Kontextes zu nehmen. – LaBracca

+0

Kühl. Manchmal für Berichte mit den Ergebnissen zu schließen ist in Ordnung. –