11
votes

Commandez par une vue SQL Server 2008

Nous avons une vue dans notre base de données qui a une commande par elle. Maintenant, je réalise que les vues ne commandent généralement pas, car différentes personnes peuvent l'utiliser pour différentes choses et la veulent différemment. Cette vue est toutefois utilisée pour un étui d'utilisation très spécifique qui exige un certain ordre. (C'est le classement de l'équipe pour une ligue de football.)

La base de données est SQL Server 2008 Express, V.10.0.1763.0 sur une boîte Windows Server 2003 R2.

La vue est définie comme telle: < / p> xxx

il renvoie: xxx

maintenant, quand je jette un Sélectionnez contre la vue, Il commande les résultats par Sexe, Teamyear, Code, Teamid . Notez qu'il ordonne de commander par TeamID au lieu de POINTS comme la commande par clause spécifie.

Toutefois, si je copie l'instruction SQL et l'exécutez exactement comme dans une nouvelle fenêtre de requête, elle commande correctement comme spécifié par la clause par < / p>


0 commentaires

7 Réponses :



2
votes

Exécutez une trace de profiler sur votre base de données et consultez la requête qui est en réalité étant exécutée lorsque vous interrogez votre vue.

Vous pouvez également envisager d'utiliser une procédure stockée pour renvoyer les données de votre vue, commandées correctement pour votre cas d'utilisation spécifique.


1 commentaires

Yah, je cherchais vraiment quelque chose directement requis, cependant, la fonction de valorisation de la table, qu'une SPRROC n'est pas.



19
votes

L'ordre des lignes retournées par une vue avec un La clause n'est jamais garantie. Si vous avez besoin d'une commande de ligne spécifique, vous devez spécifier où vous sélectionnez à partir de la vue.

Voir ceci la note en haut de Ce livre en ligne entrée.


1 commentaires

C'est ennuyeux! Je peux un peu voir / comprendre de ne pas le garantir dans une vue, une sorte de ... mais il devrait au moins travailler dans une fonction de valorisation de la table. Grrr. Merci pour la réponse quand même. :)



4
votes

Utilisez simplement:

" haut (99) pour cent "

ou

"TOP (nombre 1000S fois plus que vos rangées de données comme 24682468123)" Ça marche! juste l'essayer.


0 commentaires

4
votes

dans SQL Server 2008, la commande par est ignorée dans des vues qui utilisent 100% TOP 100%. Dans les versions antérieures de SQL Server, la commande par n'était autorisée que si le top 100% a été utilisé, mais un ordre parfait n'a jamais été garanti. Cependant, beaucoup ont supposé qu'un ordre parfait était garanti. Je déduit que Microsoft ne veut pas induire en erreur les programmeurs et les DBA pour croire qu'il existe un ordre garanti à l'aide de cette technique.

Une excellente démonstration comparative de cette inexactitude peut être trouvée ici ...

http://blog.sqlauthority.com/2009/11/24/sql-server-interesting-OBServation-Top-100-Cercent-Ad-Order-By

Oups, je viens de remarquer que cela avait déjà été répondu. Mais en vérifiant la démonstration comparative mérite de toute façon.


0 commentaires

3
votes

Microsoft a réparé cela. Vous avez correctif votre serveur SQL

http://support.microsoft.com/kb/926292


0 commentaires

2
votes

J'ai trouvé une solution alternative.

Mon plan initial consistait à créer une colonne "Sort_Order" qui empêcherait les utilisateurs de devoir effectuer une sorte complexe.

J'ai utilisé une fonction Windowed Row_Number. Dans la clause de l'ordre, j'ai spécifié l'ordre de tri par défaut dont j'avais besoin (comme cela aurait été dans l'ordre d'une instruction SELECT).

Je reçois plusieurs résultats positifs:

  1. Par défaut, les données sont renvoyées dans l'ordre de tri par défaut que j'ai initialement destiné (ceci est probablement dû à la fonction fenêtrière ayant pour trier les données avant d'attribuer la valeur de tri_order)

  2. D'autres utilisateurs peuvent trier les données de manière alternative si elles choisissent de

  3. La colonne Sort_Order est là pour un besoin de tri très spécifique, ce qui facilite la tâche des utilisateurs de trier les données de sorte que l'outil qu'ils utilisent réarrangent les rowset.

    Remarque: Dans mon application spécifique, les utilisateurs accèdent à la vue via Excel 2010 et par défaut, les données sont présentées à l'utilisateur comme je l'avais espéré sans autre tri nécessaire.

    J'espère que cela aide ceux qui ont un problème similaire.

    acclamations, Ryan


0 commentaires