SQL Server 儲存過程的經典分頁

2021-04-13 04:16:43 字數 2545 閱讀 6198

建立表:

create table [testtable] (

[id] [int] identity (1, 1) not null ,

[firstname] [nvarchar] (100) collate chinese_prc_ci_as null ,

[lastname] [nvarchar] (100) collate chinese_prc_ci_as null ,

[country] [nvarchar] (50) collate chinese_prc_ci_as null ,

[note] [nvarchar] (2000) collate chinese_prc_ci_as null

) on [primary]

go set identity_insert testtable on

declare @i int

set @i=1

while @i<=20000

begin

insert into testtable([id], firstname, lastname, country,note) values(@i, ''firstname_***'',''lastname_***'',''country_***'',''note_***'')

set @i=@i+1

end

set identity_insert testtable off

-------------------------------------

分頁方案一:(利用not in和select top分頁)

語句形式:

select top 10 *

from testtable

where (id not in

(select top 20 id

from testtable

order by id))

order by id

select top 頁大小 *

from testtable

where (id not in

(select top 頁大小*頁數 id

from 表

order by id))

order by id

-------------------------------------

分頁方案二:(利用id大於多少和select top分頁)

語句形式:

select top 10 *

from testtable

where (id >

(select max(id)

from (select top 20 id

from testtable

order by id) as t))

order by id

select top 頁大小 *

from testtable

where (id >

(select max(id)

from (select top 頁大小*頁數 id

from 表

order by id) as t))

order by id

-------------------------------------

分頁方案三:(利用sql的游標儲存過程分頁)

create procedure xiaozhengge

@sqlstr nvarchar(4000), --查詢字串

@currentpage int, --第n頁

@pagesize int --每頁行數

as set nocount on

declare @p1 int, --p1是游標的id

@rowcount int

exec sp_cursoropen @p1 output,@sqlstr,@scrollopt=1,@ccopt=1,@rowcount=@rowcount output

select ceiling(1.0*@rowcount/@pagesize) as 總頁數--,@rowcount as 總行數,@currentpage as 當前頁

set @currentpage=(@currentpage-1)*@pagesize+1

exec sp_cursorfetch @p1,16,@currentpage,@pagesize

exec sp_cursorclose @p1

set nocount off

其它的方案:如果沒有主鍵,可以用臨時表,也可以用方案三做,但是效率會低。

建議優化的時候,加上主鍵和索引,查詢效率會提高。

通過sql 查詢分析器,顯示比較:我的結論是:

分頁方案二:(利用id大於多少和select top分頁)效率最高,需要拼接sql語句

分頁方案一:(利用not in和select top分頁) 效率次之,需要拼接sql語句

分頁方案三:(利用sql的游標儲存過程分頁) 效率最差,但是最為通用

SQLserver的儲存過程

儲存過程 create 是建立儲存過程,alter 是更改 改變儲存過程 在第一次寫儲存過程時用 create 若修改儲存過程程式之後,則 alter 替換create 再執行 在資料庫中 begin end 為大括號的意思 建立儲存過程的格式 procedure可簡寫為proc proc為程式 步...

sql server儲存過程

建立表的語句 create table student sno int primary key,sname nvarchar 30 sgentle nvarchar 2 sage int,sbirth smalldatetime,sdept nvarchar 30 drop table studen...

SQLSERVER儲存過程

sqlserver儲存過程使用說明書 引言首先介紹一下什麼是儲存過程 儲存過程就是將常用的或很複雜的工作,預先用 sql語句寫好並用乙個指定的名稱儲存起來,並且這樣的語句是放在資料庫中的,還可以根據條件執行不同 sql語句,那麼以後要叫資料庫提供與已定義好的儲存過程的功能相同的服務時,只需呼叫 ex...