SQL儲存過程分頁與遊標使用
阿新 • • 發佈:2018-11-11
儲存過程:
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,@ [email protected] 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
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,@
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