J'ai créé une vue SQL et j'ai besoin de trier les résultats de sélection à l'aide de la commande par 4 champs, mais je reçois un message que la commande par ne peut pas être utilisée dans des vues, à moins que j'utilise haut. Quelqu'un peut-il expliquer pourquoi le haut est nécessaire et quelqu'un a une solution de contournement pour trier dans une vue SQL? p>
merci. p>
5 Réponses :
Si vous utilisez SQL Server, vous pouvez faire
select top 100 percent * from MyTable order by MyColumn
Depuis 2005, l'optimiseur SQL supprime cette commande de sorte que cela ne fonctionne pas! Soyez prudent avec ça.
Bien sur! Directement de l'équipe SQL Server Query Optimizer: blogs.msdn.com /queryroptteam/archive/2006/03/24/560396.aspx
Merci, je n'ai pas utilisé cela depuis SQL 2000 jours - je suis d'accord avec certains des commentaires sur cette page que l'ordre d'ordre devrait être illégal puisqu'il n'est pas toujours honoré.
Le "top 100%" travaillé. Et il semble que le correctif est dans le tri car il trie correctement par les 4 champs. Merci pour toutes les réponses de l'aide. Erwin
Si cela fonctionne, c'est purement par hasard. Ne soyez pas surpris quand à l'avenir, votre logique basée sur ces pauses.
Vous n'avez pas besoin de trier une vue. Une vue est comme une table pour que vous puissiez le trier lorsque vous en sélectionnez:
select * from yourView order by yourColumns
Il n'y a aucune garantie que la sortie de la vue sera commandée forte> Seul l'ordre ultérieur en s'applique pour les ensembles de résultats: non intérieurs. Donc, seule cette commande par peut être garantie de fonctionner: p> Vous pouvez l'ajouter aux vues ou aux tables dérivées et il oblige " matérialisation intermédiaire " car les résultats doivent être commandés. Toutefois, pour SQL Server 2005 et ci-dessus, vous devez utiliser Quelqu'un sera em> utiliser votre vue avec un ordre différent à celui interne à un moment donné. P> P> TOP 2000000000 CODE> PAS
TOP 100% CODE> (sauf pour ce HF que Daniel Vassallo a mentionné!) P>
Vous pouvez essayer:
CREATE VIEW View_Products AS SELECT ProductID, ProductName, UnitPrice, CreateDate FROM Products Order by CreateDate DESC OFFSET 0 ROWS
créerait un index sur la colonne avec laquelle vous avez l'intention de trier l'aide de la vue? P>