重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
写存储过程 ..
涉县网站建设公司创新互联,涉县网站设计制作,有大型网站制作公司丰富经验。已为涉县超过千家提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的涉县做网站的公司定做!
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
存储过程: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注入
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