0

我想从 sql server 2008 中的表中获取 100-150 的行,我该怎么做?有什么办法吗?我尽可能多地搜索限制关键字在 mysql 中可用,但对于 sql server 使用公用表技术,但我不想这样做,有没有其他可用的方法,因为它在 Mysql 中可用?

4

4 回答 4

0

使用 sql 限制

http://php.about.com/od/mysqlcommands/g/Limit_sql.htm

于 2012-05-29T13:06:20.677 回答
0

在 SQL 2005 及更高版本中,有一个 ROW_NUMBER() 函数。如果您需要同时适用于 MySQL 和 SQL Server 的东西,那么我不知道这在 MySQL 中是否可用,因为我从未使用过它。

http://msdn.microsoft.com/en-us/library/ms186734.aspx

链接页面中给出的似乎最相关的示例如下所示,其中查询的结果按日期排序,然后返回该结果集中的第 50 到 60 行。

USE AdventureWorks2012;
GO
WITH OrderedOrders AS
(
    SELECT SalesOrderID, OrderDate,
    ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber
    FROM Sales.SalesOrderHeader 
) 
SELECT SalesOrderID, OrderDate, RowNumber  
FROM OrderedOrders 
WHERE RowNumber BETWEEN 50 AND 60;
于 2012-05-29T13:13:23.587 回答
0

实际上,最便宜的方法是使用 top,然后使用 row_number()

select *
from (select *,  row_number() over (order by (select NULL)) as rownum
      from (select top 150 t.*
            from t
           ) t
     ) t
where rownum >= 100

但是,我确实给你一个警告。关系表中没有行 100-150 这样的东西,因为它们本质上是无序的。您需要指定顺序。为此,您需要通过以下方式订购:

select *
from (select *,  row_number() over (order by <field>) as rownum
      from (select top 150 t.*
            from t
            order by <field>
           ) t
     ) t
where rownum >= 100
于 2012-05-29T13:31:51.380 回答
0
select * from
(select row_number() over (order by @column) as row,*  from  Table) as t
where row between 100 and 150

@column 将被您表中的一个列替换,这很好地用于对结果进行排序

于 2012-05-29T13:55:22.783 回答