SQL儲存過程分頁與游標使用

2021-08-19 09:54:42 字數 2025 閱讀 1186

儲存過程:

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 rs = cmd.execute 

游標使用:

使用游標的順序:

聲名游標、開啟游標、讀取資料、關閉游標、刪除游標

create

procedure pk_test

as--

宣告個變數

declare @o_id nvarchar

(20)

declare @a_salary float

--宣告

乙個游標

mycursor

,declare mycursor cursor

forselect 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

SQL 儲存過程,游標

if exists select from sysobjects where id object id proc fetch all 事先刪除儲存過程 drop procedure proc fetch all gocreate procedure proc fetch all as 當 set n...

游標對於分頁儲存過程

1。我個人認為最好的分頁方法是 select top 10 from table where id 200 寫成儲存過程,上面的語句要拼一下sql語句,要獲得最後大於的哪乙個id號 2。那個用光標的方式,只適合於小資料量的表,如果表在一萬行以上,就差勁了 你的儲存過程還比不上not in分頁,示例 ...

sql 儲存過程分頁

create proc myx prpagerecordset querystr nvarchar 1000 keyfield nvarchar 200 pagesize int,pagenumber int as begin declare sqltext as nvarchar 4000 dec...