简单分页存储过程修改解决思路
在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 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |