sqlserver做分页,sql 分页

SQLSERVER如何实现分页查询?

写存储过程 ..

涉县网站建设公司创新互联,涉县网站设计制作,有大型网站制作公司丰富经验。已为涉县超过千家提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的涉县做网站的公司定做!

SET QUOTED_IDENTIFIER ON

GO

SET ANSI_NULLS ON

GO

ALTER PROCEDURE usp_Province_pagination

@PageSize INT, --每页的显示的行数

@AbsolutePage INT, -- 当前页的页数

@PageCount INT OUTPUT --总页数

AS

DECLARE @BeginRecord INT --记录每此从哪一行开始读取

DECLARE @RecordCount INT --表中数据的总条数

DECLARE @sql NVARCHAR(1000)

SET @RecordCount = (SELECT count(*) FROM Province)

--表中没有数据的情况

IF @RecordCount = 0

BEGIN

SET @PageCount = 0

RETURN(0)

END

-- 表中的总条数大于定义的每页的行数的情况

IF @RecordCount @PageSize

BEGIN

-- 计算总能分多少页

SET @PageCount = (@RecordCount + @PageSize - 1)/@PageSize

--当前应该从哪一行开始读取

SET @BeginRecord = ((@AbsolutePage-1) * @PageSize)

SET @sql = N'SELECT TOP ' + cast(@PageSize AS NVARCHAR(100)) +' ProvinceID, provinceCode, ProvinceName

FROM Province

WHERE ProvinceID NOT IN

(SELECT TOP '+ CAST(@BeginRecord AS NVARCHAR(100)) + ' ProvinceID

FROM Province)'

EXECUTE sp_executesql @sql

END

ELSE -- -- 表中的总条数大于定义的每页的行数情况

BEGIN

SET @PageCount = 1

SET @SQL = 'SELECT ProvinceID, provinceCode, ProvinceName FROM Province '

EXECUTE sp_executesql @sql

END

GO

SET QUOTED_IDENTIFIER OFF

GO

SET ANSI_NULLS ON

GO

数据库sqlserver如何用存储过程做分页

存储过程:create Procedure pname

( @pageIndex int,@pageSize)

as

select * from tableName order by id

offset @pageIndex * pageSize fetch next pageSize rows only

分页:

sqlserver 在2008之前 使用 top 和 not int top 的方式来做分页

2008以后使用 row_number() 函数作为分页关键函数

2012使用 offset 1 fetch next 10 rows only

你问了2个问题,你可以优先把视图,存储过程,触发器等弄明白,分页是查询,在存储过程里可以写复杂的sql文,只是在运行时是预编译和参数化查询防止sql注入

对sqlserver 语句进行分页

declare @iPage int --所取的页的序数 (第几页)

declare @iPageNum int --所取的数据行数(除最后一页外,每页所取的行数应该都是一样的)

declare @iRecordNumber int --取@iPage页时,结尾记录所在行数

declare @iRecordCount int --总记录行数

--变量初始化

set @iPage=1 --可用参数传递

set @iPageNum=10 --默认每页取10行

set @iRecordNumber=@iPage*@iPageNum

select @iRecordCount=count(cirDeId) from (select cirDeId from CircleDetails group by cirDeId) a

--取最后一页时,重算结尾所在行数(@iRecordNumber)、所取记录数(@iPageNum)

if @iRecordNumber@iRecordCount

begin

set @iRecordNumber=@iRecordCount

if (@iRecordNumber%@iPageNum)0

set @iPageNum=@iRecordNumber%@iPageNum

end

select * from (

select top @iPageNum * from(

select top @iRecordNumber cirDeId,

(select count(1) from CirclePost where CircleDetails.cirDeId = CirclePost.cirdeid_cp) circlepostcount

,(select count(1) from CircleAttention where CircleDetails.cirDeId = CircleAttention.cirdeid_ca) circleattentioncount

from CircleDetails group by cirDeId order by 3 desc,2 desc

) order by 3,2

) order by 3 desc,2 desc


网站栏目:sqlserver做分页,sql 分页
URL地址:http://myzitong.com/article/dsdpehj.html