Sql分頁兩種常用演算法

2022-02-15 13:48:51 字數 2218 閱讀 6172

今天花了兩個小時,寫了兩種分頁的演算法。

--not in刪選法,這種方法查詢某個表中前面的資料效率高

create procedure page_proc

(@pagesize int, --頁數,

@pageindex int,--頁碼

@tablename varchar(50),--表名

@mast varchar(50)--表的主鍵名)as

begin

declare @arg int 

set @arg=@pagesize*(@pageindex-1)

--使用動態sql

declare @strsql varchar(1000)

set @strsql='select top('+cast(@pagesize as varchar(20))+') * from '+@tablename

+' where '+@mast+' not in(select top('+cast(@arg as varchar(20))+') '+@mast+' from '+@tablename+')'

print @strsql

exec(@strsql)

end--正序倒序法,這種方法查詢某個表中後面的資料效率高

create

proc fenye

@tablename

varchar(50),--

表名@mast

varchar(50),--

表的主鍵名

@pageindex

int,--

頁碼@pagecount

int--

頁數as

begin

--求出表的總行數,由於是動態sql給@rowcount賦值,所以需要用到sp_executesql

declare

@rowcount

intdeclare

@countsql

nvarchar(200)

set@countsql='

select @innercount=count(*) from '+

@tablename

exec sp_executesql @countsql,n'

@innercount int output

',@rowcount output

--print @rowcount

--求出子查詢要查的行數

declare

@count

intset

@count

=@rowcount

-(@pageindex

-1)*

@pagecount

--如果查詢條件不符合則結束此儲存過程

if(@count

<

0)return ;

--使用動態sql

declare

@strsql

varchar(1000)

set@strsql='

select top '+

cast(@pagecount

asvarchar(20))+

'* from '+

'(select top '+

cast(@count

asvarchar(20))+

'* from '+

cast(@tablename

asvarchar(50))+

'order by '+

cast(@mast

asvarchar(50))+

'desc) as temp order by '+

cast(@mast

asvarchar(50))

print

@strsql

exec(@strsql) 

end這兩種是最常用的,第一次發技術隨筆,不足之處請大家了解。

使用正序倒敘法查詢表前面的資料成功例子:

select * from (select top 10 * from (select top 12 * from a0002 order by id asc) as temp order by id desc) as tt order by id

使用正序倒敘法查詢表前面的資料失敗例子:

select top 10 * from (select top 12 * from a0002 order by id asc) as temp order by id asc

兩種分頁SQL效率比較

資料庫版本 oracle9i r9.2.0.6 兩種方案 1.select from select a.rownum rn from select from table a where rn 20 and rn 10 2.select from select a.rownum rn from sel...

MS SQL 兩種分頁

row number row number declare pagesize int,pageindex intset pagesize 20 set pageindex 2 select from select row number over order by byod zzfp.id desc ...

兩種常用的排序演算法

本文討論兩種著名且很有用的排序演算法 插入排序,快速排序。插入排序的思想與打牌起牌類似 每次從牌堆裡拿一張牌,插入到已經排好序的牌中。具體演算法描述如下 從第乙個元素開始,該元素可以認為已經被排序 取出下乙個元素,從該元素開始,從後向前掃瞄表 如果前乙個元素大於後乙個元素,則交換兩個元素的位置 重複...