2009-07-28 7 views
13

So habe ich eine SQL-Anweisung bekommt, das so etwas wie dieses abgespeckte aussieht:Order of (nolock) und Tabellen-Aliases auf SQL Server

SELECT column 
FROM table t (nolock) 
LEFT OUTER JOIN table2 (nolock) t2 on t.id = t2.id 

Diese Anweisung funktioniert auf meinem SQL 2005 und SQL 2008-Umgebungen. Es ist nicht in einer remote SQL 2005-Umgebung. Ich habe die letzte Zeile zu:

LEFT OUTER JOIN table2 t2 (nolock) on t.id = t2.id 

Dies funktioniert in der Remote-Umgebung.

Fragen beiseite, ob (Nolock) geeignet ist und dass die Syntax intern konsistent bleiben sollte, irgendwelche Ideen, warum dies passiert? Ich habe versucht, nach Hotfixes/KBs zu suchen, die damit beschäftigt waren, und habe nichts gefunden. Gibt es eine Einstellung auf SQL Server, die dieses Verhalten verursachen könnte?

+4

Welche Kompatibilitätsgrad wird auf die Datenbank eingestellt? –

+1

was funktioniert "und" es nicht auf .. "bedeutet, dass Sie eine Fehlermeldung erhalten und/oder sperren? –

Antwort

8

Überprüfen Sie die Datenbankkompatibilität.

Es sollte 90 sein, damit diese Syntax funktioniert.

gerade geprüft:

sp_dbcmptlevel 'test', 80 

DBCC execution completed. If DBCC printed error messages, contact your system administrator. 

SELECT TOP 100 * 
FROM master t (nolock) 
LEFT OUTER JOIN master (nolock) t2 on t.id = t2.id 

Сообщение 102, уровень 15, состояние 1, строка 3 
Incorrect syntax near 't2'. 
+0

Hatte die Kompatibilität vorher nicht gesehen. Perfekt danke! – Matt

4

Ich bin mir nicht sicher, aber vielleicht wird es von compatibility level verursacht?

Seit SQL 2005 standardmäßig korrekte Syntax des Hinweises ist WITH (NOLOCK) und vielleicht ist dies der Grund.