7
votes

TSQL: Commandez par ASC sans nom de colonne

Je suis assez nouveau à SQL Server. Maintenant, je suis tombé sur une requête comme celle-ci: xxx

Il n'y a pas de nom de colonne indiqué dans la clause de l'ordre. Est-ce possible? SSMS dit non.

Jörg


4 commentaires

Il n'est pas possible, vous devez mettre ordre_by_expression dans le commander par clause . Mais pourquoi voulez-vous le faire? Comment SQL Server doit-il commander par quelle colonne dans ce cas?


Où êtes-vous sur cette question?


Jamais eu ça marche pour moi.


TIM: C'était à un test de test d'examen pour interroger SQL Server. (70-461)


3 Réponses :


1
votes

Je suis d'accord avec @mahmoud Gamal. Mais, aussi, il est possible d'écrire un tel piratage comme celui-ci - xxx

Dans ce cas, le tri sera effectué, mais la commande des lignes ne sera pas modifiée.

sur MS SQL 2005:

PROFF pour @Martin Smith

sur MS SQL 2012:

PROFF pour @martin Smith


4 commentaires

Je ne vois pas de tri exécuté lorsque j'essaie Select *, const_column = 1 de Master..spt_values ​​Commandez par const_column ASC (et ne vois pas comment cela est pertinent pour la question de toute façon)


S'il vous plaît dites, pour ce que définit un moins? @ Jörg Weigel a demandé "Il n'y a pas de nom de colonne donné dans la clause de l'ordre?", Donc j'ai écrit uniquement la requête, par exemple, ce qui trie une valeur constante.


J'ai testé ce numéro en version du serveur 2005.


Partiellement d'accord avec vos commentaires.



10
votes

C'est probablement une mauvaise reprentissement - vous devez spécifier ce que vous commandez par; Cela peut être un nom de colonne, une expression ou le numéro d'une colonne de la sortie. Il est fort probable que la requête que vous ayez vue était l'une des dernières, qui a simplement omis le numéro de colonne 1 - comme: xxx

- donc cela serait donc commander par Le contenu de la première colonne de sortie (c'est-à-dire. pays ).


2 commentaires

+1 N'aperçait pas que votre marque, mais à toute personne qui lisait ceci, la commande de la position ordinale est fronçée sur le code de production - SQL Server MVP Aaron Bertrand a une entrée de blog expliquant pourquoi: Mauvaises habitudes à frapper: Ordre par ordinal


Merci Mark. Je voulais juste être sûr que je n'ai pas négligé quelque chose.



0
votes

Ce n'est pas possible! ..

L'ordre par clause nécessite toujours un nom de colonne ou un numéro de colonne.

Voulez-vous vous répondre pourquoi vous voulez ce genre de situation, je pense que vous travaillez avec une requête dynamique ou bien s'il vous plaît faites le moi savoir.

Selon SQL Standard, cela n'est pas possible.

merci.


0 commentaires