存储过程分页
SELECT * FROM
(SELECT ROW_NUMBER() OVER (ORDER BY "字段" ) AS RowNum
FROM “表名”) as SelectedTable where "字段"=“值” between "开始数字" and “结束数字”
AJAX方面可以直接使用jquery就OK了。干嘛自己写?
② 存储过程分页查询
不是的 SQL语句每次执行时都要先编译再执行
而存储过程是编译好的SQL语句
一直在SQL服务器的 内存池 中存在
就相当与 一般的SQL语句是在电脑硬盘里面
而 存储过程 是在电脑CPU内存中的
当然 存储过程更快 更高效啦
③ SQL 存储过程分页,(要求百万级)
ALTER PROCEDURE GetDataList
(
@TableName varchar(50), --表名
@Fields varchar(5000) = '*', --字段名(全部字段为*)
@OrderField varchar(5000), --排序字段(必须!支持多字段)
@sqlWhere varchar(5000) = Null,--条件语句(不用加where)
@pageSize int, --每页多少条记录
@pageIndex int = 1 , --指定当前为第几页
@TotalPage int output --返回总页数
)
as
begin Begin Tran --开始事务 Declare @sql nvarchar(4000);
Declare @totalRecord int; --计算总记录数
if (@SqlWhere='' or @sqlWhere=NULL)
set @sql = 'select @totalRecord = count(*) from ' + @TableName
else
set @sql = 'select @totalRecord = count(*) from ' + @TableName + ' where ' + @sqlWhere EXEC sp_executesql @sql,N'@totalRecord int OUTPUT',@totalRecord OUTPUT--计算总记录数
--计算总页数
select @TotalPage=CEILING((@totalRecord+0.0)/@PageSize) if (@SqlWhere='' or @sqlWhere=NULL)
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName
else
set @sql = 'Select * FROM (select ROW_NUMBER() Over(order by ' + @OrderField + ') as rowId,' + @Fields + ' from ' + @TableName + ' where ' + @SqlWhere
--处理页数超出范围情况
if @PageIndex<=0
Set @pageIndex = 1
if @pageIndex>@TotalPage
Set @pageIndex = @TotalPage --处理开始点和结束点
Declare @StartRecord int
Declare @EndRecord int
set @StartRecord = (@pageIndex-1)*@PageSize + 1
set @EndRecord = @StartRecord + @pageSize - 1 --继续合成sql语句
set @Sql = @Sql + ') as ' + @TableName + ' where rowId between ' + Convert(varchar(50),@StartRecord) + ' and ' + Convert(varchar(50),@EndRecord)
Exec(@Sql)
---------------------------------------------------
If @@Error <> 0
Begin
RollBack Tran
Return -1
End
Else
Begin
Commit Tran
Return @totalRecord ---返回记录总数
End
end
④ sqlserver 存储过程分页
你可以采用 not in 方法
set @sql=' select top '+Str(@pageSize)+' * from dbo.LogManage where LogId not in(select top '+Str((@pageNumber-1)*@pageSize)+' LogId from LogManage order by LogId asc) as t'
⑤ 如何对存储过程返回的结果集进行分页
这个在数据库端比较好,你现在得结果集是全部的6w数据,不太好处理,不如修改下存储过程,多增加几个参数。增加个第几页,每页显示数目。
这样直接在存储过程中通过limit(mysql),或者是top直接获取就可
⑥ SQL分页与存储过程分页是一样的吗
它们是不一样的。
SQL分页:
SQL数据是以页为单位存储在文件中的,每个页面8KB。当往一个页面中插入或者修改数据并会导致该页面的数据会超出8KB时,SQL Server就会将页面拆分成两页,从而能够容纳新插入的数据。
存储过程分页是另外一个概念。当查询返回的结果集很大时,为了提高效率,将结果集分成若干小页面,并只将用户当前需要的页面返回给应用程序。一个很好的应用案例:当你在网络输入关键字,能搜索到成千上万的网页。如果将所有搜索到的结果全部一次显示出来,将会很费时间和资源。网络按照排名将每10个搜索结果分成一页,每次显示一页。用户总是能很快见到结果。
⑦ 一个比较实用的大数据量分页存储过程
一个比较实用的大数据量分页存储过程
create proc sp_PublicTurnPageWebSite( @TBName nvarchar(100)=‘‘, --表名,如 pinyin
@PageSize int=10, --每页的记录数,默认为 10
@CurPage int=1, --表示当前页 1
@KeyField nvarchar(100)=‘ID‘, --关键字段名,默认为 ID,该字段要求是表中的索引 或 无重复和不为空的字段
@KeyAscDesc nvarchar(4)=‘ASC‘, --关键字的升、降序,默认为升序 ASC , 降序为 DESC
@Fields nvarchar(500)=‘*‘, --所选择的列名,默认为全选
@Condition nvarchar(200)=‘‘, --where 条件,默认为空
@Order nvarchar(200)=‘‘ --排序条件,默认为空
) with encryption as
BEGIN
if @TBName = ‘‘
begin
raiserror(‘请指定表名!‘,11,1)
return
end
if @PageSize <=0 or @CurPage <0
begin
raiserror(‘当前页数和每页的记录数都必须大于零!‘,11,1)
return
end
if @KeyAscDesc = ‘DESC‘
set @KeyAscDesc = ‘<‘
else
set @KeyAscDesc = ‘>‘
if @Condition <> ‘‘
set @Condition = ‘ where ‘ + @Condition
一个比较实用的大数据量分页存储过程
declare @SQL nvarchar(2000) set @SQL = ‘‘
if @CurPage = 1
set @SQL = @SQL + ‘SELECT Top ‘ + cast(@PageSize as nvarchar(20)) + ‘ ‘ + @Fields + ‘ FROM ‘ + @TBName + @Condition + ‘ ‘ + @Order
else
begin
declare @iTopNum int
set @iTopNum = @PageSize * (@CurPage - 1)
set @SQL = @SQL + ‘declare @sLastValue nvarchar(100)‘ + char(13)
set @SQL = @SQL + ‘SELECT Top ‘ + cast(@iTopNum as nvarchar(20)) + ‘ @sLastValue=‘ + @KeyField + ‘ FROM ‘ + @TBName + @Condition + ‘ ‘ + @Order + char(13)
declare @Condition2 nvarchar(200)
if @Condition = ‘‘
set @Condition2 = ‘ where ‘ + @KeyField + @KeyAscDesc + ‘@sLastValue ‘
else
set @Condition2 = ‘ and ‘ + @KeyField + @KeyAscDesc + ‘@sLastValue ‘
set @SQL = @SQL + ‘SELECT Top ‘ + cast(@PageSize as nvarchar(20)) + ‘ ‘ + @Fields + ‘ FROM ‘ + @TBName + @Condition + @Condition2 + @Order
end
⑧ oracle存储过程的分页
调用的时候这样
declare
ocur tespackage.test_cursor;
v_count int:=0;
v_pagecount int :=0;
v_out int;
begin
fenye('table1',20,1,v_count,v_pagecount,ocur);
loop
fetch ocur into v_out ;
exit when ocur%notfound ;
dbms_output.put_line('count='||v_count);
end loop;
end ;
/
⑨ Oracle 存储过程分页
存储过程是可以返回数据集的,用一个游标。
还有你的问题我都不怎么清楚
⑩ SQLServer数据库存储过程分页是怎样的
存储过程:create Procere pname
( @pageIndex int,@pageSize)
as
select * from tableName order by id
offset @pageIndex * pageSize fetch next pageSize rows only
分页:
sqlserver 在2008之前 使用 top 和 not int top 的方式来做分页
2008以后使用 row_number() 函数作为分页关键函数
2012使用 offset 1 fetch next 10 rows only
你问了2个问题,你可以优先把视图,存储过程,触发器等弄明白,分页是查询,在存储过程里可以写复杂的sql文,只是在运行时是预编译和参数化查询防止sql注入