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