假设有一个留言本里面有n条留言这个留言本就是数据库中的一张表表名: message
字段: id name content time如果我想按时间顺序查找最后回复的 第1到第10条 留言,
sql语句是: select top 10 name,content from message order by time desc那么请问我如果想查找 第11条到第20条留言 的sql语句要怎么写呢?再进一步,我查找到 第i条到第j条 的sql语句要怎么写?( 0 < i < j <= n )其实我的意思就是说,我用select语句按某种顺序从一个表中查询出的结果,要如何获得结果中的第i条记录到第j条记录?前提是不能把数据全部读出来再去循环去查找,那样效率太低。非常感谢高手相助!!!
字段: id name content time如果我想按时间顺序查找最后回复的 第1到第10条 留言,
sql语句是: select top 10 name,content from message order by time desc那么请问我如果想查找 第11条到第20条留言 的sql语句要怎么写呢?再进一步,我查找到 第i条到第j条 的sql语句要怎么写?( 0 < i < j <= n )其实我的意思就是说,我用select语句按某种顺序从一个表中查询出的结果,要如何获得结果中的第i条记录到第j条记录?前提是不能把数据全部读出来再去循环去查找,那样效率太低。非常感谢高手相助!!!
(select top (i-1) id from message order by time desc) b
on a.id=b.id
where b.id is null
order by a.time desc
b -> 是结果集(select top (i-1) id from message order by time desc)的别名a left join b -> 左联接b只有(i-1)个记录,所以从第i行开始,b.id is nullselect top (j-i+1) a.* ... where b.id is null
即为取从message第i行到第j行的记录
As
Declare @sql nvarchar(512)
if @PageIndex = 1 begin
Set @sql = 'Select top ' + convert(nvarchar(8),@PageSize) + ' ' + @Fields + ' From ' + @TableName
end
else begin
Set @sql = 'select top ' + convert(nvarchar(8),@PageSize) + ' ' + @Fields + ' From ' + @TableName
Set @sql = @sql + ' Where ' + @KeyField + ' > (select max(' + @KeyField + ') From (Select Top '
Set @sql = @sql + convert(nvarchar(8), @PageSize * (@PageIndex - 1)) + ' * from '+ @TableName + ' Order by '+ @KeyField +') T)'
end --Print @sql
exec sp_executesql @sql参数说明:@TableName:要查询的数据表名称@KeyField:数据表主键字段@Fields:要查询的字段名列表,使用逗号分隔,最后一个字段名后不需要逗号@PageIndex:要查询的页面索引@PageSize:每页数据笔数,默认为15,即每页15笔数据例:获取第11笔到第20笔记录
Exec SelectPage 'Message', 'ID', 'name, content', 10, 2