22,209
社区成员
发帖
与我相关
我的任务
分享
declare @page_size int;
declare @page_num int;
--比如:每页10条记录
set @page_size = 10;
--比如:先取第1页
set @page_num = 1;
select *
from
(
select *,
row_number() over(order by @@servername) as rownum,
--这里按照@@servername来排序,
--你可以根据需要按照id,sid,sname等字段来排序
(row_number() over(order by @@servername) - 1) / @page_size as pagenum
from sys.objects
)t
where pagenum = @page_num - 1
sql = "select top "+PAGESIZE+" * from t_book"+
" where 1=1 and cid = ? and orderBy not in"+
" (select top "+(PAGESIZE*(PAGENUM-1))+" orderBy from t_book order by orderBy)"+
" order by orderBy";
create PROCEDURE [dbo].[usp_Get_Record_ByPage]
@tblName varchar(255), -- 表名
@fldName varchar(1000) = '*', -- 需要返回的列,默认*
@strOrder varchar(255)='', -- 排序的字段名,必填。后面跟着排序方式,如UserName Desc ,多个排序字段用逗号分开,
@PageSize int = 10, -- 页尺寸,默认10
@PageIndex int = 1, -- 页码,默认1
@strWhere varchar(1500) = '', -- 查询条件 (注意: 不要加 where)
@TotalCount int output --返回记录总数
AS
declare @strSQL varchar(5000)
if @strWhere !=''
set @strWhere=' where '+@strWhere
if @TotalCount is null
begin
declare @totalSql nvarchar(4000)
set @totalSql='SELECT @TotalCount=COUNT(*) FROM '+@tblName+' '+@strWhere
exec sp_executesql @totalSql,N'@TotalCount int OUTPUT',@TotalCount OUTPUT
end
set @strSQL=
'SELECT * FROM ('+
'SELECT ROW_NUMBER() OVER (ORDER BY '+@strOrder+') AS pos,'+@fldName+' '+
'FROM '+@tblName+' '+@strWhere+
') AS sp WHERE pos BETWEEN '+str((@PageIndex-1)*@PageSize+1)+' AND '+str(@PageIndex*@PageSize)
exec (@strSQL)
GO