手动分页,怎么保证删除行后还能查到5~10行数据

woshishe 2012-10-09 07:05:54
手动分页,比如共25条数据,id值为1~25,删除第8条数据后,第二页能查到6~11条数据(第8条被删除)...懂手动分页的高手来
...全文
185 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshishe 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]
引用 9 楼 的回复:

引用 8 楼 的回复:
sql的话,就是单表,多表连接,子查询子类的,

木啥难度,但是有技巧,掌握了技巧可以少写很多(sql)代码,sql版高人多的是,呵呵,

熟练后需要掌握一些系统函数的使用,就差不多了

神马触发器,存储过程,函数之类的,掌握了语法,本质上不都是sql么?

set @sql='SELECT TOP'+ str(@pageSi……
[/Quote]
明白了,原来如此简单,谢谢~
专注or全面 2012-10-10
  • 打赏
  • 举报
回复
例如查询第二页的时候,

删了第8条,那么此时的第一页的前十条数据就是,1,2,3,4,5,6,7,9,10,11,

你再查询第二页的时候,查询出十条数据,并且最小ID大于第一页的最大ID,此时的第一页(10条数据)最大ID就变成11了,也就是你所谓的自动补上了
专注or全面 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

引用 8 楼 的回复:
sql的话,就是单表,多表连接,子查询子类的,

木啥难度,但是有技巧,掌握了技巧可以少写很多(sql)代码,sql版高人多的是,呵呵,

熟练后需要掌握一些系统函数的使用,就差不多了

神马触发器,存储过程,函数之类的,掌握了语法,本质上不都是sql么?

set @sql='SELECT TOP'+ str(@pageSize) +' * FROM……
[/Quote]

我写伪代码吧

我这样给你解释,假如有100条数据,每页10条,
你查询第一页是第1-10条数据,
你的sql是select top 10 * from yourTableName where id>(select top 10*0 from yourTableName)
查询完后删除了第8条数据,
然后查询第二页
你的sql根据参数重新执行了查询

此时你的sql是select top 10 * from yourTableName where id >(select top 10*1 id from yourTableName)

你看看查询条件中,where id>any(select top 10*1 id from yourTableName)
此时即便是删除了第8条数据,那你id还是大于前十条记录中的最大一个ID,不管你删了几条数据,第二页的ID是大于前十个ID的最大值的,前十个ID的是不确定的,跟你删了几条没关系,不知道我说清楚了没有
woshishe 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]
sql的话,就是单表,多表连接,子查询子类的,

木啥难度,但是有技巧,掌握了技巧可以少写很多(sql)代码,sql版高人多的是,呵呵,

熟练后需要掌握一些系统函数的使用,就差不多了

神马触发器,存储过程,函数之类的,掌握了语法,本质上不都是sql么?
[/Quote]
set @sql='SELECT TOP'+ str(@pageSize) +' * FROM TestTable'
+' WHERE ID > (SELECT MAX(id)FROM (SELECT TOP '+str(@pageSize*@pageIndex)+' id FROM TestTable ORDER BY id) t )'+
'ORDER BY ID'
能不能给我解释解释这句啊?是个什么逻辑啊,不明白删除了某个id后,后面的id怎么补上...
woshishe 2012-10-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
例如查询第二页的时候,

删了第8条,那么此时的第一页的前十条数据就是,1,2,3,4,5,6,7,9,10,11,

你再查询第二页的时候,查询出十条数据,并且最小ID大于第一页的最大ID,此时的第一页(10条数据)最大ID就变成11了,也就是你所谓的自动补上了
[/Quote]
哥们,你QQ多少啊,加个好友吧~
专注or全面 2012-10-09
  • 打赏
  • 举报
回复
sql的话,就是单表,多表连接,子查询子类的,

木啥难度,但是有技巧,掌握了技巧可以少写很多(sql)代码,sql版高人多的是,呵呵,

熟练后需要掌握一些系统函数的使用,就差不多了

神马触发器,存储过程,函数之类的,掌握了语法,本质上不都是sql么?

woshishe 2012-10-09
  • 打赏
  • 举报
回复
看不懂啊,看来还得好好学sql啊...要看什么书才能看懂上面的sql语句啊哥们~
专注or全面 2012-10-09
  • 打赏
  • 举报
回复
像上面直接拼出来的sql。用起来也怪爽的

你前面删了数据,后面查询下一页的时候,他重新执行了一遍sql的

为啥要分区,就是每次只查询一页的数据,用到哪一页(即时)地区查,而不是一次全部加载数据
专注or全面 2012-10-09
  • 打赏
  • 举报
回复


if (pageNumber > 1)
{
strSql = string.Format(@"select top {3} * from {0} where ID > (select max(id) from (select top ({1}*{3}) id from {0} Order By {2})A) Order By {2}", tableName, pageNumber, orderByColmn,Convert.ToInt32(this.txtPageCount.Text));
}
else
{
strSql = string.Format(@"select top {2} * from {0} Order By {1} ", tableName, orderByColmn, Convert.ToInt32(this.txtPageCount.Text));
}




这里有更方便的更通用的,不用整存储过程,自己写的,你想用的话测测,应该木问题
专注or全面 2012-10-09
  • 打赏
  • 举报
回复
你每次都是重新查询的啊,你管他删了哪条数据干啥?删了前面的后面的自动补上

你试了没有?


create table TestTable
(
id int identity(1,1),
Name varchar(50),
Remark varchar(50)
)

declare @i int
set @i=0;
while @i<100
begin
insert into TestTable values (CAST(NEWID() as varchar(50)),CAST(NEWID() as varchar(50)))
set @i=@i+1
end


create PROCEDURE TestProc
-- Add the parameters for the stored procedure here
(@pageSize int,
@pageIndex int)

AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;

declare @sql nvarchar(500)
-- Insert statements for procedure here
set @sql='SELECT TOP'+ str(@pageSize) +' * FROM TestTable'
+' WHERE ID > (SELECT MAX(id)FROM (SELECT TOP '+str(@pageSize*@pageIndex)+' id FROM TestTable ORDER BY id) t )'+
'ORDER BY ID'

exec (@sql)
END
GO


--每次不是这样执行的吗?

exec TestProc 10,2


--那你每次不是重新查询了,

--那还用担心什么被删了啥的?


woshishe 2012-10-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
传入参数后,会根据每页的数据条数,自动查出来指定条数的数据,你数据删了,数据库就看不到这条数据了,应该会查出来你所谓的“第二页能查到6~11条数据”
你试试,有结果了说一下啊
[/Quote]
这个分页sql要怎么写啊?这个查询语句应该是在删除后总是能查到数据库里的存在的数据。我现在是用id值查询的,比如我25条数据,每页5条,删除了第6条数据,数据库里没了id=6的数据。第二页应该查询id为7~11的数据(5条),但是如果删除的是第11条数据呢,查询语句应该是通用的,要怎么查询啊?
专注or全面 2012-10-09
  • 打赏
  • 举报
回复
传入参数后,会根据每页的数据条数,自动查出来指定条数的数据,你数据删了,数据库就看不到这条数据了,应该会查出来你所谓的“第二页能查到6~11条数据”
你试试,有结果了说一下啊
专注or全面 2012-10-09
  • 打赏
  • 举报
回复
不管你删除哪条,分页sql写好后,会自动给你查出来的,难道不是吗?

27,579

社区成员

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

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