Sql server SQL Server 2012存储过程中具有顶部不同(x)记录的分页
我想创建带有分页的存储过程,以及针对表子集的TOP100。例如,在一个包含300多万条记录的tablex:employee表中,我希望获取前10万条记录并进行分页。我可以使用下面的脚本进行分页,但我想获取前100000条记录并进行分页Sql server SQL Server 2012存储过程中具有顶部不同(x)记录的分页,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我想创建带有分页的存储过程,以及针对表子集的TOP100。例如,在一个包含300多万条记录的tablex:employee表中,我希望获取前10万条记录并进行分页。我可以使用下面的脚本进行分页,但我想获取前100000条记录并进行分页 DECLARE @currentPageNo int,@takeData int SET @currentPageNo =1 SET @takeData = 10 SELECT DISTINCT emp.empid,emp.name,s.Salary, FROM
DECLARE @currentPageNo int,@takeData int
SET @currentPageNo =1
SET @takeData = 10
SELECT DISTINCT emp.empid,emp.name,s.Salary,
FROM Employee emp
LEFT OUTER JOIN salary S ON emp.empid=S.empid
where emp.empid=12
ORDER BY emp.empid desc
OFFSET (@currentPageNo - 1) * @takeData ROWS
FETCH NEXT @takeData ROWS ONLY
我需要一些关于如何实现这一目标的建议。我正在使用SQL Server 2012。为了正确执行分页,您需要确保结果集的顺序并分配行号,为此,您可以使用ROWNUMBER OVER 您还需要知道整个结果集的总计数。这将告诉你有多少总页数。可以在辅助查询中执行此操作,也可以使用COUNT OVER为总行添加另一列 下面是一个使用变量的示例:
DECLARE @currentPageNo int,@takeData int
SET @currentPageNo =0
SET @takeData = 10
SELECT TOP(@currentPageNo) * FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY [ColumnName]) RowNumber, *
FROM (
SELECT DISTINCT emp.empid,emp.name,s.Salary,COUNT(emp.empid) OVER() TotalRows
FROM Employee emp
LEFT OUTER JOIN salary S ON emp.empid=S.empid
where emp.empid=12
) Q1
) Q2
WHERE ( @takeData<>0 AND RowNumber BETWEEN ((@currentPageNo * @takeData) + 1) AND ((@currentPageNo +1) * @takeData))
并不是每个人都理解印度的编号系统,所以你应该编辑你的问题,用正确的英语术语或数字来代替lack和crore。这个问题的可能重复没有多大意义。最缺的是什么?@julienvasseur是10万还是10万。它是印度编号系统的一部分。我首先试着阅读和理解这个问题,因为它已经被礼貌地回答了塔布阿勒曼。Jpw建议编辑问题,并提供适当的解释或大家都能理解的术语。什么也没做。事实上,这意味着什么并不明显,应该在问题中加以适当解释。