2009-07-28 115 views
13

的訂購(NOLOCK)和表的別名,所以我已經得到了相比下來SQL語句看起來是這樣的:SQL服務器

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

本聲明適用於我的SQL 2005和SQL 2008環境。它不在遠程SQL 2005環境中。我已將最後一行切換爲:

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

這適用於遠程環境。

拋開(nolock)是否合適以及語法應該保持內部一致的問題,爲什麼會出現這種情況?我試圖搜索處理這個問題的修復程序/知識庫並且什麼都沒有提出。是否有可能導致此行爲的SQL服務器上的設置?

+4

是將數據庫設置爲兼容什麼水平? – 2009-07-28 15:21:40

+1

什麼是「有效」和「它沒有......」是指你會得到一個錯誤信息和/或鎖定? – 2009-07-28 15:27:46

回答

8

檢查您的數據庫兼容性級別。

它應該是90爲此語法工作。

剛纔檢查:

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'. 
4

我不確定,但可能是由compatibility level引起的?

由於默認情況下,SQL 2005的正確語法提示是WITH (NOLOCK),也許這就是原因。