2017-09-20 39 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] 
相关问题