加入收藏 | 设为首页 | 会员中心 | 我要投稿 威海站长网 (https://www.0631zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

简单分页存储过程修改解决思路

发布时间:2022-11-18 14:00:56 所属栏目:MsSql教程 来源:网络
导读: 简单分页存储过程修改
在SQL2005中,我写了一个简单的分页存储过程,但服务器上用的是SQL2000数据库。在SQL 2000数据库中不支持row_number函数。如何把下面存储过程修改能够在SQL2000中运行

简单分页存储过程修改

在SQL2005中,我写了一个简单的分页存储过程,但服务器上用的是SQL2000数据库。在SQL 2000数据库中不支持row_number函数。如何把下面存储过程修改能够在SQL2000中运行。

create procedure [dbo].[sp_UnifyPage]

@tableName varchar(50), --表名

@columnName varchar(50), --排序的列名

@startIndex varchar(50), --开始页

@endIndex varchar(50), --结束页

@conditions varchar(500),--分页的条件

@value varchar(50), --分页的条件所赋的值

@orderby varchar(50), --排序

@orderbyValue varchar(50) ----0代表asc,1代表desc

as

begin

declare @where1 nvarchar(200) --保存分页的条件

declare @orderBydesc nvarchar(200) --保存排序的条件

declare @sql varchar(2000)--变量Mssq分页存储过程,保存构造的sql语句

--分页的条件

if(@conditions is null or rtrim(@conditions)='' and @value is null or rtrim(@value)='')--如果没有查询条件

begin

set @where1=' '

set @value=' '

end

else

begin

set @where1=' and '+@conditions +'='+@value

end

--排序

if(@orderby is null or rtrim(@orderby)='' and @orderbyValue is null or rtrim(@orderbyValue)='')--如果没有排序条件

begin

set @orderBydesc=' '

set @orderbyValue=' '

end

else

begin

set @orderBydesc=' order by '+@orderby+' '+case @orderbyValue when 0 then ' asc' else ' desc' end

end

set @sql='with table_temp as (select row_number() over(order by '+@columnName+') as rowIndex,* from '+@tableName+')

select * from table_temp where rowIndex between '+@startIndex+' and '+@endIndex +@where1 +@orderBydesc

--select @sql

exec(@sql)

end

------解决方案--------------------

试试将这段:

SQL code

set @sql='with table_temp as (select row_number() over(order by '+@columnName+') as rowIndex,* from '+@tableName+') select * from table_temp where rowIndex between '+@startIndex+' and '+@endIndex +@where1 +@orderBydesc--select @sqlexec(@sql)

------解决方案--------------------

去看看2000通用的分页吧!一般是要加主键ID,然后用TOP来分页处理的。

------解决方案--------------------

SQL code

分页的存过--来自CSDNCREATE PROCEDURE [dbo]。[Basic_Pagination2005]@tblNamenvarchar(200),--表名@fidlelist nvarchar(1000), --要查询字段@fldNamenvarchar(100), --排序字段@PageSizeint,--页尺寸@PageIndex int,--页码@IsReCount bit ,-- 返回记录总数, 非 0 值则返回@OrderType bit,-- 设置排序类型, 非 0 值则降序@strWhere nvarchar(1000)--查询条件ASdeclare @sqlstr nvarchar(4000),@tmpwhere nvarchar(4000),@tmporder nvarchar(100)BEGINif @OrderType != 0beginset @tmporder = @fldName +' desc 'endelsebeginset @tmporder = @fldName +' asc 'endset @tmpwhere='';if(@strWhere!='')beginset @tmpwhere=' where '+@strWhere;endset @sqlstr=N'select * from(select '+@fidlelist+', ROW_NUMBER() OVER(orderby '+@tmporder+') as row from '+@tblName+@tmpwhere+') tmp where row between '+cast(((@PageIndex-1)*@PageSize+1) as nvarchar)+' and '+cast(@PageIndex*@PageSize as nvarchar); exec sp_executesql @sqlstrif @IsReCount != 0beginset @sqlstr=N'select count(*) as Total from '+ @tblName+@tmpwhereexec sp_executesql @sqlstrendEND--返回第三页EXECUTE [Basic_Pagination2005] 'SC','S#','GRADE',10,3,200,1,'GRADE IS NOT NULL' --返回第10页EXECUTE [Basic_Pagination2005] 'SC','S#','GRADE',10,10,200,1,'GRADE IS NOT NULL' DROP PROC [Basic_Pagination2005]

------解决方案--------------------

SQL code

--分页存过2CREATE PROC spMyp@tbnamesysname,--要分页显示的表名@FieldKey nvarchar(1000),--用于定位记录的主键(惟一键)字段,可以是逗号分隔的多个字段@PageCurrent int=1,--要显示的页码@PageSize int=10,--每页的大小(记录数)@FieldShow nvarchar(1000)='',--以逗号分隔的要显示的字段列表,如果不指定,则显示所有字段@FieldOrder nvarchar(1000)='',--以逗号分隔的排序字段列表,可以指定在字段后面指定DESC/ASC@Where nvarcha

(编辑:威海站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!