以前參考過網上朋友(是誰忘了,知道的說一聲)寫的,但感覺有點不適合我的要求。修改大部分後如下所示。getrecordpagetotal為分頁時取得頁總數。當然可以寫在getrecordbypage裡,但個人認為那樣的話,在只取頁總數的情況下也要使用getrecordbypage,查詢效率不太好,就分開寫
--///
if exists (select * from sysobjects where id = object_id('getrecordpagetotal')and type = 'p')
drop procedure getrecordpagetotal
goif exists (select * from sysobjects where id = object_id('pgetrecordbypage')and type = 'p')
drop procedure pgetrecordbypage
go--///
create procedure getrecordpagetotal
@tblname varchar(100), -- 表名
-- @pagesize int, -- 頁大小
@strwhere varchar(1000) = '' -- 查詢條件 (注意: 不要加 where)
as begin
declare @strsqltemp varchar(2000) -- 臨時變數
if @strwhere=''
set @strsqltemp='select count(*) from ['+@tblname+']'
else set @strsqltemp='select count(*) from ['+@tblname+'] where '+@strwhere
exec (@strsqltemp)
endgo
--create procedure getrecordbypage
@tblname varchar(100), -- 表名
@fldcow varchar(100)='*', -- 要查詢的列
@fldname varchar(255), -- 排序列
@pagesize int = 10, -- 頁尺寸
@pageindex int = 1, -- 頁碼
@ordertype bit = 1, -- 設定排序型別, 1則降序
@strwhere varchar(2000) = '' -- 查詢條件 (注意: 不要加 where)
asdeclare @strsql varchar(3000) -- 主語句
declare @strtmp varchar(1000) -- 臨時變數
declare @strorder varchar(500) -- 排序型別
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 @strsql = 'select top ' + str(@pagesize) + ' '+@fldcow+' from ['
+ @tblname + '] where [' + @fldname + ']' + @strtmp + '(['
+ @fldname + ']) from (select top ' + str((@pageindex-1)*@pagesize) + ' ['
+ @fldname + '] from [' + @tblname + ']' + @strorder + ') as tbltmp)'
+ @strorder
if @strwhere != ''
set @strsql = 'select top ' + str(@pagesize) + ' '+@fldcow+ ' from ['
+ @tblname + '] where [' + @fldname + ']' + @strtmp + '(['
+ @fldname + ']) from (select top ' + str((@pageindex-1)*@pagesize) + ' ['
+ @fldname + '] from [' + @tblname + '] where ' + @strwhere + ' '
+ @strorder + ') as tbltmp) and ' + @strwhere + ' ' + @strorder
if @pageindex = 1
begin
set @strtmp = ''
if @strwhere != ''
set @strtmp = ' where (' + @strwhere + ') '
set @strsql = 'select top ' + str(@pagesize) + ' '+@fldcow+ ' from ['
+ @tblname + ']' + @strtmp + ' ' + @strorder
endexec (@strsql)
go注:不想分頁的話,把pagesize 值設到int最大值就行了
SQL 分頁通用儲存過程
這是一個通用的分頁儲存過程,利用的是sql的系統遊標 這種效率並不是很好 create proc sp pageview sql ntext,要執行的sql語句 pagecurrent int 1,pagesize int 10,pagecount int output asset nocount ...
Sql通用分頁儲存過程
這個是一個基於framework平臺,c 語言與sql建立分頁儲存過程 1.使用dbhelpersql幫助類 2,ado連線資料庫 3,通用儲存過程 create proc dbo p paging tablename varchar 8000 表名 檢視名 pagesize int 10,頁面顯示...
SQLServer分頁查詢通用儲存過程
自開始做專案以來,一直在用。這段儲存過程的的原創者 sorry,忘記名字了 寫得這段sql 很不錯,我在這個基礎上,按照我的習慣以及思維方式,調整了 只做分頁查詢用。create procedure prcpageresult 獲得某一頁的資料 currpage int 1,當前頁頁碼 即top c...
sql 儲存過程分頁查詢
第一次遇到儲存過程分頁弄了挺長時間 主要用到了row number over 方法,此方法自動生成一個num 列,更具over中的列排序,從一開始升序 drop proc getpageshowoptionnumpnum gocreate proc aa currpagenum int,當前頁數 p...
通用儲存過程 分頁儲存過程
名稱 spall returnrows 輸入 輸出 呼叫 exec spall returnrows select from 表名 頁號,返回記錄數,主鍵 排序欄位 spall returnrows select from all categories 2,10,id id 說明 百萬級 通用儲存過...