Top 10 des résultats sur les rangées obtenues par UNION

J'utilise MSSQL 2005 pour une requête, disons:

SELECT * from Emp UNION ALL SELECT * from Emp2; 

Et je veux limiter le résultat final à 10 lignes. Si je n'avais que la table Emp, je dirais

 SELECT TOP 10 * from Emp; 

Mais puisque j'ai 2 tables maintenant, je ne peux pas dire SELECT TOP * sur aucun d'entre eux, ni je peux utiliser LIMIT 10 à la fin. Avez-vous une suggestion?

 SELECT TOP 10 * FROM (SELECT * from Emp UNION ALL SELECT * from Emp2) a 

Cependant, je suggérerais peut-être que vous classiez les résultats de sorte que vous n'obtiendriez pas seulement les 10 premiers résultats du premier syndicat. Donc quelque chose comme ça peut-être:

 SELECT TOP 10 * FROM (SELECT * from Emp UNION ALL SELECT * from Emp2) a ORDER BY a.lastName 

essaye ça:

 SELECT TOP 10 * FROM ( SELECT * FROM Emp UNION ALL SELECT * FROM Emp2 ) derivedTable 

essaye ça:

 SELECT top 10 * from ( SELECT * from Emp UNION ALL SELECT * from Emp2) a 

Faites de la requête UNIONed une sous-requête et select les 10 premières lignes de celle-ci:

 SELECT TOP 10 * FROM ( SELECT * FROM Emp UNION ALL SELECT * FROM Emp2 ) unioned