兩個分頁儲存過程的用法:
[basic_pagination2005]:只能在sqlserver2005下用;
[basic_pagination2000]:可在sqlserver2000和sqlserver2005下通用;
兩個儲存過程的引數是一樣的,其中的引數說明在**中已有注釋。
需要注意的是當@isrecount=1時,會返回記錄總數。所以在.net中需用dataset存放記錄集。
第乙個table是要查詢的字段資料,第二個table便是記錄總數。
1.basic_pagination2000
create procedure [dbo].[basic_pagination2000]@tblname varchar(255), -- 表名
@fidlelist varchar(2000), --要查詢字段
@fldname varchar(255), -- 排序字段
@pagesize int, -- 頁尺寸
@pageindex int, -- 頁碼
@isrecount bit, -- 返回記錄總數, 非 0 值則返回
@ordertype bit, -- 設定排序型別, 非 0 值則降序
@strwhere varchar(1000) -- 查詢條件 (注意: 不要加 where)
asdeclare @strsql varchar(6000) -- 主語句
declare @strtmp varchar(100),@tmpwhere varchar(200) -- 臨時變數
declare @strorder varchar(400) -- 排序型別
if @ordertype != 0
begin
set @strtmp = '<(select min'
set @strorder = ' order by [' + @fldname +'] desc'
endelse
begin
set @strtmp = '>(select max'
set @strorder = ' order by [' + @fldname +'] asc'
endset @tmpwhere='';
if(@strwhere!='')
begin
set @tmpwhere=' where '+@strwhere;
endif @pageindex = 1
begin
set @strsql = 'select top '
+ str(@pagesize) +' '+@fidlelist+' '+'from ['
+ @tblname + '] ' + @tmpwhere + ' ' + @strorder
endelse
begin
set @strsql = 'select top '
+ str(@pagesize) + ' '+@fidlelist+' '+'from ['
+ @tblname + '] where
[' + @fldname + ']' + @strtmp + '(['
+ @fldname + ']) from
(select top ' + str((@pageindex-1)*@pagesize) + ' ['
+ @fldname + '] from
[' + @tblname + '] ' + @tmpwhere + ' '
+ @strorder + ') as tbltmp)
' + @tmpwhere + ' ' + @strorder
endexec(@strsql)
if @isrecount != 0
begin
set @strsql = 'select count(*)
as total from [' + @tblname + ']'+ @strwhere
exec (@strsql)
end
2.basic_pagination2005
alter procedure [dbo].[basic_pagination2005]@tblname nvarchar(200), --表名
@fidlelist nvarchar(1000), --要查詢字段
@fldname nvarchar(100), --排序字段
@pagesize int, --頁尺寸
@pageindex int, --頁碼
@isrecount bit , -- 返回記錄總數, 非 0 值則返回
@ordertype bit, -- 設定排序型別, 非 0 值則降序
@strwhere nvarchar(1000) --查詢條件
asdeclare @sqlstr nvarchar(4000),
@tmpwhere nvarchar(4000),@tmporder nvarchar(100)
begin
if @ordertype != 0
begin
set @tmporder = @fldname +' desc '
endelse
begin
set @tmporder = @fldname +' asc '
endset @tmpwhere='';
if(@strwhere!='')
begin
set @tmpwhere=' where '+@strwhere;
endset @sqlstr=n'select * from
(select '+@fidlelist+', row_number() over(order
by '+@tmporder+') as row from '+@tblname+@tmpwhere+')
tmp where row between '+cast
(((@pageindex-1)*@pagesize+1) as nvarchar)+' and '+cast
(@pageindex*@pagesize as nvarchar);
exec sp_executesql @sqlstr
if @isrecount != 0
begin
set @sqlstr=n'select count(*) as total from '+ @tblname+@tmpwhere
exec sp_executesql @sqlstr
endend
兩個分頁儲存過程
drop proc dbo up getrecordbypage gocreate procedure dbo up getrecordbypage tblname varchar 255 表名 fldname varchar 255 主鍵欄位名 strcontent nvarchar 255 查詢...
快速掌握Lua 5 3 兩個完整的例子
將lua指令碼作為乙個小型的簡化版的 資料庫 展現了如何簡單高效的將這個 資料庫 中的資料轉化為網頁顯示。db.lua 檔案中內容。這裡看似是一張名為 entry 的表中儲存了許多資料,實際上在轉化程式中這時乙個名為 entry 的函式,引數是下面這個儲存了許多資料的 table 還記得 foo 與...
SQL Server未公開的兩個儲存過程
sp msforeachtable和sp msforeachdb是sql server的兩個系統儲存過程,存在於master資料庫當中,但是在sql server的聯機幫助中並沒有這兩個儲存過程,也就是說微軟並沒有把這兩個儲存過程編進sql server的聯機叢書中。那麼microsoft設計這兩個...