2010-11-10 6 views
3

Mon 'VIEW' est commandé. Mais quand j'utilise un select pour montrer son résultat, la sortie est mélangée. Ce comportement se produit également avec la déclaration suivanteComment obtenir une vue ordonnée?

SELECT * FROM (SELECT * FROM TABLE ORDER BY COLUMNA) AS DERIVEDTABLE 

Comment éviter ce brassage?

Répondre

2

vous ne devez avoir un ORDER BY sur la sélectionner externe qui utilise la vue:

SELECT * FROM (SELECT * FROM TABLE) AS DERIVEDTABLE ORDER BY YourColumn 

sauf si vous utilisez TOP

SELECT * FROM (SELECT top 1000000 * FROM TABLE ORDER BY COLUMNA) AS DERIVEDTABLE 

cependant l'ordre de tri final pourrait encore changer en fonction de la requête externe , sauf si vous ajoutez une autre commande par:

SELECT * FROM (SELECT top 1000000 * FROM TABLE ORDER BY COLUMNA) AS DERIVEDTABLE 
ORDER BY COLUMNA 
+0

' TOP 100' travaillé, mais 'TOP (100) PERCENT' n'a pas fonctionné –

3

Malheureusement, les vues ne peuvent pas être commandées dans SQL Server. Vous devez le faire sur l'instruction select en lisant la vue.

Lame, je sais.

+0

Mais les vues peuvent être commandées. C'est juste que le sélecteur externe lève l'exigence de commande. – Andomar

+1

Vous avez presque tous les deux raison, la solution de contournement 'TOP 100000000' fonctionne bien –

1

Vous ne pouvez pas. La seule façon de spécifier un ordre est de le demander au niveau le plus externe de la requête - c'est le seul endroit où ORDER BY est destiné à commander le jeu de résultats final. Toute autre utilisation de ORDER BY est uniquement destinée à faciliter d'autres opérations (telles que la définition des "TOP 10" lors de l'utilisation de TOP).

SQL Server 2000 avait l'habitude d'être trompé dans l'application d'un ORDER BY dans une vue, et malheureusement, les concepteurs de vue dans Enterprise Manager et SSMS continuent à prétendre que cela fonctionne. Ce n'est pas le cas. En ne permettant pas à l'astuce de fonctionner plus longtemps, cela offre probablement plus d'opportunités pour l'optimisation des requêtes.

Questions connexes