假设我在tbl_students
中有500条记录。我想选择从50和250开始的记录。我知道我可以在MySql中使用以下方式。
SELECT *
FROM tbl_students
LIMIT 50,100;
我想知道如何在SQL Server中执行此操作。浏览后我找到了这样的解决方案。
select top 100 *
from tablename
WHERE column_name BETWEEN 50 AND 250
我面临的问题是我不知道表中任何列的值,所以我不能像上面那样编写查询。在MySql中,我们可以在不知道列内的值的情况下为范围放置limit
。
提前致谢
答案 0 :(得分:3)
SELECT * FROM (
SELECT *, ROW_NUMBER() OVER (ORDER BY column_name ) as tbl_row FROM tbl_students
) tbl WHERE tbl_row >= 50 and tbl_row <= 250
我认为这是在2005版本以上的SQL Server中执行此操作的方法之一。
答案 1 :(得分:3)
您想要排序的列不清楚。表没有隐式顺序,因此如果您没有指定如何订购记录,则不能说“在x和y之间给我记录”。
但是,假设column_name
是您要使用的列并且您正在使用SQL Server 2005或更高版本,则可以使用CTE
和ROW_NUMBER
窗口函数:< / p>
WITH CTE AS
(
SELECT t.*, R = ROW_NUMBER() OVER (ORDER BY column_name)
FROM dbo.TableName t
)
SELECT * FROM CTE WHERE RN BETWEEN 50 AND 250
答案 2 :(得分:3)
如果您正在使用 SQL Server 2005/08 ,那么您可以使用CTE ...
;WITH cteRange as
(
select *, rownumber=ROW_NUMBER() OVER (Order by field)
from tablename
)
SELECT * FROM cteRange WHERE rownumber BETWEEN 50 AND 250
如果你有 SQL Server 2012 ,那么......
SELECT
*
FROM tablename
ORDER BY field
OFFSET 50 ROWS
FETCH NEXT 200 ROWS ONLY
知道 RDBMS 以及要提取和排序的列,而不是使用SELECT *...