分页存储过程灵异问题--顶贴有分

mm6268 2009-10-30 10:09:06
小弟的分页存储过程遇到灵异问题,以下为具体代码:

if exists (select * from sysobjects where name='Sp_NewsSID')
drop procedure Sp_NewsSID
go
create PROCEDURE Sp_NewsSID(
@pageIndex int,--当前页的索引
@pageSize int,--每页显示的记录数
@doCount bit,
@Class int,
@FlagID int=0 --判断分页

) with encryption AS
BEGIN
if(@doCount=1)--查询的是总记录数
select count(*) as counts from tbl_News
else--查询的是结果集
begin
declare @lower int--最小值pkid
declare @upper int--最大值pkid

declare @tempTable table(PKID int identity(1,1),eID int)--存储临时表值
set @lower=(@pageIndex-1)*@pageSize
set @upper=@lower+@pageSize

if(@FlagID=0)
begin
insert into @tempTable(eID) select News_ID from TBL_News order by News_ID desc
select News_ID,News_Title,News_Datetime,News_Type,News_Name,News_SID from TBL_News e ,@tempTable t where e.News_ID=t.eID
and t.pkid>@lower and t.pkid<=@upper and News_SID=@Class order by e.News_ID desc
end


end
end
go

exec Sp_NewsSID @pageIndex=1,@pageSize=10,@doCount=0,@Class=4--数据正常
exec Sp_NewsSID @pageIndex=2,@pageSize=10,@doCount=0,@Class=1--有数据,但应属于第一页的数据在这里出现
exec Sp_NewsSID @pageIndex=0,@pageSize=10,@doCount=0,@Class=1--没有数据


综合问题就是如果,@Class=1、2、3第一页无数据,如果,@Class=4、5、6 第一页数据正常,请高人帮忙解决一下,在线等
...全文
176 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
bl_song 2009-10-30
  • 打赏
  • 举报
回复
hh ,好玩啊
Flyingdragon168 2009-10-30
  • 打赏
  • 举报
回复
那就頂一下。
mm6268 2009-10-30
  • 打赏
  • 举报
回复
感谢26楼猫哥,哈哈,问题解决了
if exists (select * from sysobjects where name='Sp_NewsSID')
drop procedure Sp_NewsSID
go
create PROCEDURE Sp_NewsSID(
@pageIndex int,--当前页的索引
@pageSize int,--每页显示的记录数
@doCount bit,
@Class int,
@FlagID int=0 --判断分页

) with encryption AS
BEGIN
if(@doCount=1)--查询的是总记录数
select count(*) as counts from tbl_News
else--查询的是结果集
begin
declare @lower int--最小值pkid
declare @upper int--最大值pkid

declare @tempTable table(PKID int identity(1,1),eID int)--存储临时表值
set @lower=(@pageIndex-1)*@pageSize
set @upper=@lower+@pageSize

if(@FlagID=0)
begin
insert into @tempTable(eID) select News_ID from TBL_News where News_SID=@Class order by News_ID desc
select News_ID,News_Title,News_Datetime,News_Type,News_Name,News_SID from TBL_News e ,@tempTable t where e.News_ID=t.eID
and t.pkid>@lower and t.pkid<=@upper order by e.News_ID desc
end


end
end
go
家猫 2009-10-30
  • 打赏
  • 举报
回复
猫来也
gsk09 2009-10-30
  • 打赏
  • 举报
回复

楼主的主键没有联接全,试试这个

if exists (select * from sysobjects where name='Sp_NewsSID')
drop procedure Sp_NewsSID
go
create PROCEDURE Sp_NewsSID(
@pageIndex int,--当前页的索引
@pageSize int,--每页显示的记录数
@doCount bit,
@Class int,
@FlagID int=0 --判断分页

) with encryption AS
BEGIN
if(@doCount=1)--查询的是总记录数
select count(*) as counts from tbl_News
else--查询的是结果集
begin
declare @lower int--最小值pkid
declare @upper int--最大值pkid

declare @tempTable table(PKID int identity(1,1),News_ID int,News_BID int,News_SID int)--存储临时表值
set @lower=(@pageIndex-1)*@pageSize
set @upper=@lower+@pageSize

if(@FlagID=0)
begin
insert into @tempTable
select News_ID,News_BID,News_SID
from TBL_News
where News_SID=@Class
order by News_ID desc

select News_ID,News_Title,News_Datetime,News_Type,News_Name,News_SID
from TBL_News e ,@tempTable t
where e.News_ID=t.News_ID
and e.News_BID = t.News_BID
and e.News_SID = t.News_SID
and t.pkid>@lower
and t.pkid<=@upper
and News_SID=@Class
order by e.News_ID desc
end

end
end
go
mm6268 2009-10-30
  • 打赏
  • 举报
回复
回复21楼:

消息 121,级别 15,状态 1,过程 Sp_NewsSID,第 23 行
INSERT 语句的选择列表包含的项多于插入列表中的项。SELECT 语句中值的数目必须与 INSERT 语句中列的数目匹配。
消息 156,级别 15,状态 1,过程 Sp_NewsSID,第 26 行
关键字 'order' 附近有语法错误。
laomeng520 2009-10-30
  • 打赏
  • 举报
回复
fwacky 2009-10-30
  • 打赏
  • 举报
回复
试试!
fwacky 2009-10-30
  • 打赏
  • 举报
回复


if exists (select * from sysobjects where name='Sp_NewsSID')
drop procedure Sp_NewsSID
go
create PROCEDURE Sp_NewsSID(
@pageIndex int,--当前页的索引
@pageSize int,--每页显示的记录数
@doCount bit,
@Class int,
@FlagID int=0 --判断分页

) with encryption AS
BEGIN
if(@doCount=1)--查询的是总记录数
select count(*) as counts from tbl_News
else--查询的是结果集
begin
declare @lower int--最小值pkid
declare @upper int--最大值pkid

declare @tempTable table(PKID int identity(1,1),eID int,News_SID int )--存储临时表值
set @lower=(@pageIndex-1)*@pageSize
set @upper=@lower+@pageSize

if(@FlagID=0)
begin
insert into @tempTable(eID)
select News_ID, News_SID from TBL_News where News_SID = @Class order by News_ID desc
select News_ID,News_Title,News_Datetime,News_Type,News_Name,News_SID from TBL_News e inner join @tempTable t on e.id=t.eID and e.News_SID = t.News_SID
where e.News_SID = @Class and t.pkid>@lower and t.pkid<=@upper and order by e.News_ID desc
end


end
end
go


mm6268 2009-10-30
  • 打赏
  • 举报
回复
TBL_News主键为News_ID,News_BID、News_SID分别为大类和小类表主键
gsk09 2009-10-30
  • 打赏
  • 举报
回复
主键是哪几个?
mm6268 2009-10-30
  • 打赏
  • 举报
回复
对,1、2、3 都有问题,其他都没问题
fwacky 2009-10-30
  • 打赏
  • 举报
回复
@Class=4 正常,等于 1 就不正常了!
navy887 2009-10-30
  • 打赏
  • 举报
回复
jf
fwacky 2009-10-30
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 mm6268 的回复:]
回复13楼:

exec Sp_NewsSID @pageIndex=1,@pageSize=10,@doCount=0,@Class=4--数据正常
exec Sp_NewsSID @pageIndex=2,@pageSize=10,@doCount=0,@Class=4--正常
*****************************************************************************************
exec Sp_NewsSID @pageIndex=2,@pageSize=10,@doCount=0,@Class=1--有数据,但应属于第一页的数据在这里出现
exec Sp_NewsSID @pageIndex=1,@pageSize=10,@doCount=0,@Class=1 --数据正常
[/Quote]

也就是,说在等于 @Class=1 有问题!其他都没有问题?
mm6268 2009-10-30
  • 打赏
  • 举报
回复
回复13楼:

exec Sp_NewsSID @pageIndex=1,@pageSize=10,@doCount=0,@Class=4--数据正常
exec Sp_NewsSID @pageIndex=2,@pageSize=10,@doCount=0,@Class=4--正常
*****************************************************************************************
exec Sp_NewsSID @pageIndex=2,@pageSize=10,@doCount=0,@Class=1--有数据,但应属于第一页的数据在这里出现
exec Sp_NewsSID @pageIndex=1,@pageSize=10,@doCount=0,@Class=1 --数据正常
guguda2008 2009-10-30
  • 打赏
  • 举报
回复
exec Sp_NewsSID @pageIndex=1,@pageSize=10,@doCount=0,@Class=4--数据正常
exec Sp_NewsSID @pageIndex=2,@pageSize=10,@doCount=0,@Class=1--有数据,但应属于第一页的数据在这里出现
exec Sp_NewsSID @pageIndex=0,@pageSize=10,@doCount=0,@Class=1--没有数据

改成

exec Sp_NewsSID @pageIndex=1,@pageSize=10,@doCount=0,@Class=4--数据正常
exec Sp_NewsSID @pageIndex=2,@pageSize=10,@doCount=0,@Class=4--看看正常不
*****************************************************************************************
exec Sp_NewsSID @pageIndex=2,@pageSize=10,@doCount=0,@Class=1--有数据,但应属于第一页的数据在这里出现
exec Sp_NewsSID @pageIndex=1,@pageSize=10,@doCount=0,@Class=1 --看看和上一组的数据是否相同
mm6268 2009-10-30
  • 打赏
  • 举报
回复
可关键问题是我需要CLASS进行分类呀,有解决方法吗?
guguda2008 2009-10-30
  • 打赏
  • 举报
回复
你这个每一个测试都有两个在变,能测出问题吗?
fwacky 2009-10-30
  • 打赏
  • 举报
回复

(1786403 行受影响)
id name PKID eID
----------- -------------------------------------------------- ----------- -----------
1786403 test 1 1786403
1786402 test 2 1786402
1786401 test 3 1786401
1786400 test 4 1786400
1786399 test 5 1786399
1786398 test 6 1786398
1786397 test 7 1786397
1786396 test 8 1786396
1786395 test 9 1786395
1786394 test 10 1786394

(10 行受影响)


(1786403 行受影响)
id name PKID eID
----------- -------------------------------------------------- ----------- -----------
1786393 test 11 1786393
1786392 test 12 1786392
1786391 test 13 1786391
1786390 test 14 1786390
1786389 test 15 1786389
1786388 test 16 1786388
1786387 test 17 1786387
1786386 test 18 1786386
1786385 test 19 1786385
1786384 test 20 1786384

(10 行受影响)


(1786403 行受影响)
id name PKID eID
----------- -------------------------------------------------- ----------- -----------

(0 行受影响)



加载更多回复(10)

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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