it-swarm.com.de

mit (nolock) oder (nolock) - Gibt es einen Unterschied?

Alles basiert auf der Annahme, dass with (nolock) für die Situation völlig angemessen ist. Es gibt bereits viele Fragen, ob man with (nolock) verwenden soll oder nicht.

Ich habe mich umgesehen und konnte nicht feststellen, ob es tatsächlich einen Unterschied zwischen der Verwendung von with(nolock) gibt:

select customer, zipcode from customers c with(nolock) 

oder nur (nolock):

select customer, zipcode from customers c (nolock) 

Gibt es einen funktionalen Unterschied zwischen den beiden? Stilistisch?
Ist einer älter als der andere und hat die Möglichkeit, dass er veraltet ist?

41
Rob

Es gibt keinen funktionalen Unterschied, aber irgendwann funktioniert die Syntax ohne WITH nicht mehr. Dies ist veraltet:

select customer, zipcode from customers c (nolock) 

Sie sollten also dieses Format verwenden:

select customer, zipcode from customers c with (nolock) 

Die Verwendung des Schlüsselworts WITH für Tabellenhinweise ist seit mindestens SQL Server 2008 veraltet. Durchsuchen Sie das folgende Thema nach dem Ausdruck Specifying table hints without using the WITH keyword.:

http://msdn.Microsoft.com/en-us/library/ms143729%28SQL.100%29.aspx

(Diskussionen darüber, ob Sie nolock überhaupt verwenden sollten, sind natürlich getrennt. Ich habe hier darüber gebloggt )

51
Aaron Bertrand

Obwohl wir keinen Unterschied zwischen (nolock) und (nolock) finden ... würde mit (nolock) in der SQL Server 2000-Version nicht funktionieren.

Und mir ist auch aufgefallen, dass beim Abrufen von Daten von Verbindungsservern nur '(nolock)' nicht funktioniert, wohingegen Sie 'with (nolock)' verwenden sollten.

-- this will not work 
select * from server1.DB1.dbo.table1 (nolock)

-- this will  work 
select * from server1.DB1.dbo.table1 with (nolock)
5
Vsh

Es hängt wirklich davon ab, auf welcher Version von SQL Server Sie sich befinden.

Das Auschecken der neuesten Dokumentation für SQL Server 2012 Tabellenhinweise das Weglassen von WITH ist eine veraltete Funktion. Also, während from customers c (nolock) wird wahrscheinlich funktionieren; Sie sollten wirklich from customers c WITH (nolock) verwenden

Beachten Sie, dass dies anders ist als from customers nolock; Wobei Nolock als Tabellen-Alias ​​dienen würde.

Funktionell; sie scheinen gleich zu sein.

3
Jim B

Ich habe dies für ein Datenzeilenergebnis von 170000+ versucht, jedoch keinen Unterschied im Abfrageausführungsplan festgestellt. Beide arbeiten auf die gleiche Weise.

2
Avinash