2017-09-20 1 views
1

S'il vous plaît aidez-moi à comprendre le dessousSyntaxe incorrecte près du mot clé 'order'. SQL Server

Pourquoi est-

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

lancer une erreur?

Lorsque

select top 1 * from dbo.module 

et

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

ne sont pas?

+0

@Yeou, je suis plus enclin à comprendre ce qui ne va pas avec la parenthèse. –

+0

Vous devez garder l'ordre par des parenthèses extérieures (sélectionnez top 1 * à partir de dbo.module) ordre par [ordre] – Yeou

+0

ordre par devrait toujours être la dernière instruction pour la requête que vous écrivez. C'est pourquoi il devrait être hors de la parenthèse. – Yeou

Répondre

1

Parce que SQL Server exécuter des instructions et les instructions ont la syntaxe exacte spécifiée pour eux.

L'instruction SELECT doit commencer par le mot clé SELECT. Si l'instruction commence par bracket, il s'agit d'une sous-requête, et vous ne pouvez pas utiliser 'Order by'.

+1

>>> Si l'instruction commence par bracket, elle est sous-requête, et vous ne pouvez pas utiliser 'Order by' dedans. Dans le cas de OP, la sous-requête a ** top 1 **, donc s'il s'agit d'une sous requête, par est permis dedans. Donc ce n'est pas une question de "sous-requête". Par exemple, celui-ci ne produit pas d'erreur même s'il a sous-requête avec ORDER BY: 'select * from (sélectionnez top 1 * de dbo.module order par [commande]) t' – sepupic

+0

Belle explication, vous devriez le faire pour répondre ! – SAS

1

La présence de crochets autour de l'instruction n'est pas une syntaxe/une instruction correcte. Cela fonctionne:

(SELECT top 1 * FROM dbo.module) ORDER BY [order]