2017-09-20 44 views
1

請幫我理解下面關鍵字'order'附近的語法錯誤。 SQL服務器

爲什麼

(select top 1 * from dbo.module order by [order]) 

拋出一個錯誤?

select top 1 * from dbo.module 

select top 1 * from dbo.module order by [order] 

都沒有?

+0

@你,我更傾向於理解括號中的錯誤。 –

+0

您需要通過外部括號保持順序(從dbo.module中選擇頂部1 *)order by [order] – Yeou

+0

order by應始終是您寫入查詢的最後一個語句。這就是爲什麼它應該在括號之外。 – Yeou

回答

1

由於SQL Server執行語句,並且語句具有爲它們指定的確切語法。

SELECT語句必須以SELECT關鍵字開頭。 如果語句以括號開始,它是子查詢,並且不能在其中使用'排序依據'。

+1

>>>如果語句以括號開始,它是子查詢,並且不能使用'Order by'。<<<在OP的情況下,「subquery」具有** top 1 **,所以如果它是子查詢,則order被允許在其中。所以這不是「被子查詢」的問題。例如,即使它具有ORDER BY子查詢,它也不會產生任何錯誤:'select * from(select * from dbo.module order by [order])t' – sepupic

+0

好的解釋,你應該讓它回答! – SAS

1

圍繞整個語句括括號不是一個好的語法/陳述。這工作原理:

(SELECT top 1 * FROM dbo.module) ORDER BY [order] 
相關問題