存储过程分页显示的大大的问题

yzaiml 2007-09-13 07:06:08
ALTER PROCEDURE sp_GetPriceInfo
(
@transCode char(2),
@pagesize int,
@pageindex int,
@docount bit
)
AS
begin
declare @sql nvarchar(500),@strsql nvarchar(4000)
set @sql=' '

if(@transCode<>'')
begin
set @sql=@sql+' transCode=@transCode and '
end


if(@sql<>'')
set @sql=' where ' +left(@sql,len(@sql)-4)
else
set @sql=' '

set @strsql=' if(@docount=1) '+
' SELECT count(*) FROM price '+@sql+
' else '+
' begin '+
' declare @indextable table(id int identity(1,1),nid int) '+
' declare @PageLowerBound int '+
' declare @PageUpperBound int '+
' set @PageLowerBound=(@pageindex-1)*@pagesize '+
' set @PageUpperBound=@PageLowerBound+@pagesize '+
' set rowcount @PageUpperBound '+
' insert into @indextable(nid) '+
' SELECT id FROM price '+@sql+
' SELECT * FROM price p '+
' inner join @indextable t on t.nid=p.id '+
' where t.id>@PageLowerBound and t.id<=@PageUpperBound order by p.endDate desc '+
' end '
exec sp_executesql @strsql,N'@transCode char(2),@pagesize int,@pageindex int,@docount bit',@transCode,@pagesize,@pageindex,@docount
end

我现在有两个问题第一个问题就是数据的显示
在页面上 第一页只显示一条 第二页显示二条 依次类推
还有一个就是排序
这个order by p.endDate desc 是我的排序
它倒是实现了 但是之是在每一页里面进行排序 而不是对所有的数据总的来进行排序


高手看看我上面的存储过程是不是有问题
...全文
134 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yzaiml 2007-09-14
  • 打赏
  • 举报
回复
我不想该我的存储过程

还有别的可以实现不
110来电 2007-09-14
  • 打赏
  • 举报
回复
-- 获取指定页的数据,网上摘录的

CREATE PROCEDURE pagination3

@tblName varchar(255), -- 表名

@strGetFields varchar(1000) = '*', -- 需要返回的列

@fldName varchar(255)='', -- 排序的字段名

@PageSize int = 10, -- 页尺寸

@PageIndex int = 1, -- 页码

@doCount bit = 0, -- 返回记录总数, 非 0 值则返回

@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序

@strWhere varchar(1500) = '' -- 查询条件 (注意: 不要加 where)

AS

declare @strSQL varchar(5000) -- 主语句

declare @strTmp varchar(110) -- 临时变量

declare @strOrder varchar(400) -- 排序类型



if @doCount != 0

begin

if @strWhere !=''

set @strSQL = "select count(*) as Total from [" + @tblName + "] where "+@strWhere

else

set @strSQL = "select count(*) as Total from [" + @tblName + "]"

end

--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况

else

begin



if @OrderType != 0

begin

set @strTmp = "<(select min"

set @strOrder = " order by [" + @fldName +"] desc"

--如果@OrderType不是0,就执行降序,这句很重要!

end

else

begin

set @strTmp = ">(select max"

set @strOrder = " order by [" + @fldName +"] asc"

end



if @PageIndex = 1

begin

if @strWhere != ''

set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from [" + @tblName + "] where " + @strWhere + " " + @strOrder

else

set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["+ @tblName + "] "+ @strOrder

--如果是第一页就执行以上代码,这样会加快执行速度

end

else

begin

--以下代码赋予了@strSQL以真正执行的SQL代码

set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["

+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["+ @fldName + "] from [" + @tblName + "]" + @strOrder + ") as tblTmp)"+ @strOrder



if @strWhere != ''

set @strSQL = "select top " + str(@PageSize) +" "+@strGetFields+ " from ["

+ @tblName + "] where [" + @fldName + "]" + @strTmp + "(["

+ @fldName + "]) from (select top " + str((@PageIndex-1)*@PageSize) + " ["

+ @fldName + "] from [" + @tblName + "] where " + @strWhere + " "

+ @strOrder + ") as tblTmp) and " + @strWhere + " " + @strOrder

end

end

exec (@strSQL)

GO
yzaiml 2007-09-13
  • 打赏
  • 举报
回复
人?丢句话就走了
yzaiml 2007-09-13
  • 打赏
  • 举报
回复
这个参数是定死的 @transCode char(2), =‘00’
@pagesize int, 每页显示多少
@pageindex int, 有多少页
@docount bit 是否返回总数
Limpire 2007-09-13
  • 打赏
  • 举报
回复
有,解释下参数
yzaiml 2007-09-13
  • 打赏
  • 举报
回复
有没有人?
yzaiml 2007-09-13
  • 打赏
  • 举报
回复
高手在哪里啊!都吃饭去了 还是回家了

22,199

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧