Tentative de limiter les résultats dans la command SQL Server

<asp:SqlDataSource ID="dsSearchResults" runat="server" ConnectionSsortingng="<%$ ConnectionSsortingngs:strConn %>" <SelectCommand="SELECT StoreNumber, StoreName, Address, City, State, PostalCode, Phone, Email, Latitude, Longitude, SQRT(POWER(Latitude - @Latitude, 2) + POWER(Longitude - @Longitude, 2)) * 62.1371192 AS DistanceFromAddress FROM Stores WHERE (ABS(Latitude - @Latitude) &lt; 1.75) AND (ABS(Longitude - @Longitude) &lt; 1.75) ORDER BY DistanceFromAddress"> <SelectParameters> 

Je souhaite limiter les résultats de la search aux 5 premiers résultats. J'ai essayé plusieurs façons mais en vain. Oui, je suis un débutant mais je veux apprendre. J'utilise SQL Server 2012.

Vous pouvez changer votre command SQL comme ceci:

 SELECT TOP 5 StoreNumber, StoreName, Address, City, State, PostalCode, Phone, Email, Latitude, Longitude, SQRT(POWER(Latitude - @Latitude, 2) + POWER(Longitude - @Longitude, 2)) * 62.1371192 AS DistanceFromAddress FROM Stores WHERE (ABS(Latitude - @Latitude) &lt; 1.75) AND (ABS(Longitude - @Longitude) &lt; 1.75) ORDER BY DistanceFromAddress 

SQL Server utilise l'instruction TOP pour limiter le résultat de la requête.

Dans votre cas, la requête serait

 SELECT TOP 5 StoreNumber, StoreName, Addres... 

Essayez d'utiliser TOP dans votre requête:

 SELECT top 5 StoreNumber, StoreName, Address, City, State, PostalCode, Phone, Email, Latitude, Longitude, SQRT(POWER(Latitude - @Latitude, 2) + POWER(Longitude - @Longitude, 2)) * 62.1371192 AS DistanceFromAddress FROM Stores WHERE (ABS(Latitude - @Latitude) &lt; 1.75) AND (ABS(Longitude - @Longitude) &lt; 1.75) ORDER BY DistanceFromAddress limit 

SQL Server 2012 vous permet d'utiliser FETCH OFFSET dans votre clause ORDER BY :

 SELECT (all your columns) FROM Stores WHERE (ABS(Latitude - @Latitude) &lt; 1.75) AND (ABS(Longitude - @Longitude) &lt; 1.75) ORDER BY DistanceFromAddress OFFSET 100 ROWS FETCH NEXT 50 ROWS ONLY; 

Cela va passer les 100 premières lignes et renvoyer 50 lignes à partir de là. Avec cette approche, vous pouvez sélectionner non seulement les lignes supérieures (n) – mais toutes (n) lignes quelque part dans votre jeu de résultats – idéal pour paginer vos résultats dans des pages de (n) lignes chacune.

Donc, si vous voulez seulement 5 lignes, utilisez

 .... ORDER BY DistanceFromAddress OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY;