WITH (NOLOCK)
verhält sich genauso wie die Einstellung der Transaktionsisolationsstufe auf READ UNCOMMITTED
, nur der Umfang ist anders.
Beachten Sie jedoch, dass SQL Server je nach Art der ausgeführten Abfrage eine andere Isolationsstufe verwenden kann. (INSERT, UPDATE, DELETE und andere Schreiboperationen müssen unter mindestens READ COMMITTED
laufen).
Ihr Freund ist nicht richtig, SQL Server wird mindestens eine Schema-Sperre während Leseoperationen für die Tabelle erwerben, um Änderungen in der Struktur der Tabelle zu verhindern. Diese Sperre wird auch dann auf die Tabelle angewendet, wenn Sie die Isolationsstufe READ UNCOMMITTED
oder den Hinweis WITH (NOLOCK)
verwenden.
Im Allgemeinen würde ich vermeiden, den WITH (NOLOCK)
Hinweis zu verwenden. Sie haben weniger Kontrolle, wenn Sie den Tabellenhinweis verwenden. Verwenden Sie die Isolationsstufe READ UNCOMMITTED
für die Verbindung, wenn fehlerhafte Lesevorgänge zulässig sind. Sie können die Isolationsstufe der Verbindung immer ändern, aber Sie können den WITH (NOLOCK)
Hinweis nicht dynamisch entfernen. Dies gilt insbesondere, wenn Sie WITH (NOLOCK)
für jede Tabelle verwenden.
Wahrscheinlich bitten Sie Ihren Freund, Sie auf einige Artikel als Beweis zu verweisen. – Sunil
Dies ist nur das Standardverhalten, wenn Sie RCSI aktivieren (das ist nicht der Standard außer bei Azure), aber Sie sollten 'With (NoLock)' routinemäßig nicht verwenden. –