相关疑难解决方法(0)

使用Row_Number在Sql Server 2008中实现表分页是否有任何性能问题?

我想使用此方法实现表分页:

SET @PageNum = 2;
SET @PageSize = 10;

WITH OrdersRN AS
(
    SELECT ROW_NUMBER() OVER(ORDER BY OrderDate, OrderID) AS RowNum
          ,*
      FROM dbo.Orders
)

SELECT * 
  FROM OrdersRN
 WHERE RowNum BETWEEN (@PageNum - 1) * @PageSize + 1 
                  AND @PageNum * @PageSize
 ORDER BY OrderDate ,OrderID;
Run Code Online (Sandbox Code Playgroud)

有什么我应该知道的吗?表有数百万条记录.

谢谢.

编辑: 使用建议的MAXROWS方法一段时间后(这真的非常快)我不得不切换回ROW_NUMBER方法,因为它具有更大的灵活性.到目前为止,我对它的速度也非常满意(我正在使用包含10列的超过1M记录的View).要使用任何类型的查询,我使用以下修改:

PROCEDURE [dbo].[PageSelect] 
(
  @Sql nvarchar(512),
  @OrderBy nvarchar(128) = 'Id',
  @PageNum int = 1,
  @PageSize int = 0    
)
AS
BEGIN
SET NOCOUNT ON

 Declare @tsql …
Run Code Online (Sandbox Code Playgroud)

sql-server paging

13
推荐指数
2
解决办法
2万
查看次数

如何为表示记录编号的表中的每一行指定一个数字?

如何以添加新记录的方式显示表中的行数,表示该行的数字越高,删除记录时,数字会相应更新?
为了更清楚,假设我有一个这样的简单表:

ID int(主键)名称varchar(5)

ID被设置为自己递增(使用身份规范),因此它不能表示行(记录)的数量,因为如果我有例如3条记录:

ID NAME
1 Alex
2 Scott
3 Sara

我删除Alex和Scott并添加一条新记录:

3 Sara
4 Mina 
Run Code Online (Sandbox Code Playgroud)

所以基本上我正在寻找一个用于执行此操作的SQL端解决方案,以便我不会在多个位置更改源代码中的任何其他内容.

我试着写一些东西来完成工作,但它很糟糕.这里是 :

SELECT        COUNT(*) AS [row number],Name
FROM          dbo.Test
GROUP BY ID, Name
HAVING        (ID = ID)
Run Code Online (Sandbox Code Playgroud)

这显示为:

row number            Name
1                     Alex
1                     Scott
1                     Sara
Run Code Online (Sandbox Code Playgroud)

虽然我希望它显示为:

row number            Name
1                     Alex
2                     Scott
3                     Sara
Run Code Online (Sandbox Code Playgroud)

sql-server database-design sql-server-express

8
推荐指数
1
解决办法
2万
查看次数