2009-10-21 53 views
2

使用SQL Server 2000開發版,爲什麼會這樣的代碼:SQL Server 2000的 「選擇被打破」 與TOP子句

select top 10 * from table 

導致此錯誤:

Server: Msg 170, Level 15, State 1, Line 1
Line 1: Incorrect syntax near '10'.

與此代碼:

select * from master m 
left join locality l on m.localityid = l.localityid 

導致此錯誤:

Server: Msg 170, Level 15, State 1, Line 2 Line 2: Incorrect syntax near 'left'.

+0

您是否收到來自SSMS的錯誤?在不包含其他查詢的新窗口中? – Andomar 2009-10-21 09:09:27

+0

該死的,這裏的下注很快。我試圖用ORDER BY建議TOP 10。它很快就被降低了。我只會在評論中發表我的回答。把一個ORDER BY放在你的TOP 10上,把沒有ORDER BY的TOP 10有一個不確定的結果,沒有多大意義 – 2009-10-21 09:12:41

+0

so ..強烈建議爲TOP操作添加ORDER BY,即使ORDERBY-less TOP會吐出結果。 – 2009-10-21 09:15:28

回答

2

答案是數據庫兼容性。它被設置爲60,而應該是80

下面是http://msdn.microsoft.com/en-us/library/bb510680.aspx

The value must be one of the following:
- 80 = SQL Server 2000
- 90 = SQL Server 2005
- 100 = SQL Server 2008

摘錄我改成了80,一切都很好,現在。

+0

有趣。你在哪裏找到這條信息? – Raptor 2009-10-21 09:20:22

+0

我猜,並在企業管理器的數據庫屬性中找到選項。 :) – 2009-10-21 10:06:21

1

我看不出爲什麼會中斷,這可能是由於安裝程序的安裝或兼容性問題。你如何運行查詢?來自查詢分析器?

作爲一些快速建議,儘量把10放在括號內。 SELECT TOP(10)* FROM .....另外,嘗試使用AS關鍵字對錶進行別名。例如SELECT * FROM master AS m ...

+0

+1因爲你提到了兼容性。 – 2009-10-21 09:19:35

+0

TOP(10)不應該在2000年工作。括號是2005+的東西。 – 2009-10-21 09:20:42

0

這兩個查詢應該沒有錯。你是否從查詢分析器執行?

如果我從第一個查詢中只選擇「SELECT TOP 10」,並且第二個選擇「SELECT * FROM MASTER M LEFT」,我可以重現錯誤。所以,如果你不是從查詢分析器執行,也許你的查詢字符串在你的應用程序的某處被代碼改變了?

0

查詢沒有問題。您正在使用哪個查詢分析器(因爲MSDE沒有GUI)?