SQL存储过程分页与游标使用

存储过程:
CREATE procedure p_splitpage    
@sql nvarchar(4000), --
要执行的sql语句
 
@page int=1,    --
要显示的页码
 
@pageSize int,  --
每页的大小
 
@pageCount int=0 out, --
总页数
 
@recordCount int=0 out --
总记录数
 
as 
set nocount on 
declare @p1 int 
exec sp_cursoropen @p1 output,@sql,@scrollopt=1,@ccopt=1,@rowcount=@pagecount output 
set @recordCount = @pageCount 
select @pagecount=ceiling(1.0*@pagecount/@pagesize) 
,@page=(@page-1)*@pagesize+1 
exec sp_cursorfetch @p1,16,@page,@pagesize  
exec sp_cursorclose @p1 
GO 

ASP
页面的内容:
 
sql = "Select id, c_s_name from tabNews where deleted<>1 Order By id Desc" 
page = cint(page_get) 
if page_post<>""then 
page = cint(page_post) 
end if 
if not page > 0 then  
page = 1 
end if 
pagesize=20’
每页的条数
 
set cmd = server.CreateObject("adodb.command") 
cmd.ActiveConnection = conn 
cmd.CommandType = 4 
cmd.CommandText = "p_SplitPage" 
cmd.Parameters.Append cmd.CreateParameter("@sql",8,1, 4000, sql) 
cmd.Parameters.Append cmd.CreateParameter("@page",4,1, 4, page) 
cmd.Parameters.Append cmd.CreateParameter("@pageSize",4,1, 4, pageSize) 
cmd.Parameters.Append cmd.CreateParameter("@pageCount",4,2, 4, pageCount) 
cmd.Parameters.Append cmd.CreateParameter("@recordCount",4,2, 4, recordCount) 
set rs = cmd.Execute 
set rs = rs.NextRecordSet 
pageCount = cmd.Parameters("@pageCount").value 
recordCount = cmd.Parameters("@recordCount").value 
if pageCount = 0 then pageCount = 1 
if page>pageCount then  
response.Redirect("?page="&pageCount)  
end if 

set rs = cmd.Execute 

游标使用:

使用游标的顺序:声名游标、打开游标、读取数据、关闭游标、删除游标

CREATE PROCEDURE PK_Test

AS

--声明个变量

declare @O_ID nvarchar(20)  

declare @A_Salary float


--声明一个游标mycursor

declare mycursor cursor for select O_ID,A_Salary from AddSalary

 

--打开游标

open mycursor

 

--从游标里取出数据(select语句中参数的个数必须要和从游标取出的变量名相同)赋值到我们刚才声明的个变量中

fetch next from mycursor into @O_ID,@A_Salary

 

/*//判断游标的状态

//0 fetch语句成功   

//-1 fetch语句失败或此行不在结果集中   

//-2被提取的行不存在*/ 

 

--循环一次次读取游标,得到@O_ID,@A_Salary的值

while (@@fetch_status=0)

 

--开始

begin

 

  --将@O_ID,@A_Salary 当做一个已知量,随便使用。

  --显示出我们每次用游标取出的值

   print '游标成功取出一条数据'

   print @O_ID

   print @A_Salary

 

--用游标去取下一条记录

   fetch next from mycursor into @O_ID,@A_Salary

end

 

 

--关闭游标

close mycursor

--撤销游标

deallocate mycursor

GO


猜你喜欢

转载自blog.csdn.net/Json111/article/details/80097730