<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) < 1.75) AND (ABS(Longitude - @Longitude) < 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) < 1.75) AND (ABS(Longitude - @Longitude) < 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) < 1.75) AND (ABS(Longitude - @Longitude) < 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) < 1.75) AND (ABS(Longitude - @Longitude) < 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;