【问题标题】:Attempting to limit the results in SQL Server command试图限制 SQL Server 命令中的结果
【发布时间】:2013-07-18 16:43:26
【问题描述】:
<asp:SqlDataSource ID="dsSearchResults" runat="server" 
                ConnectionString="<%$ ConnectionStrings: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>

我想将搜索结果限制为前 5 个结果。我尝试了几种不同的方法,但无济于事。是的,我是新手,但想学习。我正在使用 SQL Server 2012。

【问题讨论】:

    标签: asp.net sql-server sql-server-2012


    【解决方案1】:

    您可以像这样更改您的 SQL 命令:

    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
    

    【讨论】:

      【解决方案2】:

      SQL Server 使用TOP 语句来限制查询结果。

      在您的情况下,查询将是

      SELECT TOP 5 StoreNumber, StoreName, Addres...
      

      【讨论】:

        【解决方案3】:

        尝试在查询中使用 TOP:

        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 
        

        【讨论】:

          【解决方案4】:

          SQL Server 2012 允许您在 ORDER BY 子句中使用 FETCH OFFSET

          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;
          

          这将跳过前 100 行,并从那里返回 50 行。使用这种方法,您不仅可以选择前 (n) 行 - 还可以选择结果集中某处的任何 (n) 行 - 非常适合将您的结果分页分成每页 (n) 行。

          因此,如果您只想排在前 5 行,请使用

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

          【讨论】:

            猜你喜欢
            • 2013-08-29
            • 2010-09-26
            • 2015-04-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-01-20
            • 1970-01-01
            • 2018-07-24
            相关资源
            最近更新 更多