SQL查詢通用儲存過程(可分頁)

2021-04-02 22:27:42 字數 2886 閱讀 4403

以前參考過網上朋友(是誰忘了,知道的說一聲)寫的,但感覺有點不適合我的要求。修改大部分後如下所示。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 說明 百萬級 通用儲存過...