昨天寫儲存過程時遇到乙個麻煩,再搜尋答案時搜到了「通用儲存過程」,但只看到部分殘缺**,多方參考後,鄙人對其進行總結規範,得出以下規範儲存過程,竟然把本人專案裡50多個查詢儲存過程代替!不敢獨享,遂貼出與大家分享,希望對大家有所幫助!!
該儲存過程幾乎可以涵蓋所有查詢儲存過程(目前本人還沒有發現不能使用的)
引數:分頁大小,第幾頁,需要得到的字段 ,需要查詢的表 , 查詢條件,排序的欄位名,排序的型別,主鍵名稱
輸入引數即可查詢,無論是查詢一條記錄還是查詢多條記錄,無論是分頁還是不分頁,無論是需要查詢條件還是不需要查詢條件……,都可使用此通用的儲存過程!!!
通用性相當好!!
/*通用分頁儲存過程*/
use hotelmanagementsystem
go if exists(select * from sys.objects where name='***oup_getpageofrecords')
drop procedure ***oup_getpageofrecords
go --建立儲存過程
create procedure ***oup_getpageofrecords
@pagesize int = 20, --分頁大小
@currentpage int , --第幾頁
@columns varchar(1000) = '*', --需要得到的字段
@tablename varchar(100), --需要查詢的表
@condition varchar(1000) = '', --查詢條件, 不用加where關鍵字
@asccolumn varchar(100) = '', --排序的欄位名 (即 order by column asc/desc)
@bitordertype bit = 0, --排序的型別 (0為公升序,1為降序)
@pkcolumn varchar(50) = '' --主鍵名稱
as begin --儲存過程開始
declare @strtemp varchar(300)
declare @strsql varchar(5000) --該儲存過程最後執行的語句
declare @strordertype varchar(1000) --排序型別語句 (order by column asc或者order by column desc)
begin
if @bitordertype = 1 --降序
begin
set @strordertype = ' order by '+@asccolumn+' desc'
set @strtemp = ' <(select min'
end
else --公升序
begin
set @strordertype = ' order by '+@asccolumn+' asc'
set @strtemp = '>(select max'
end
if @currentpage = 1 --第一頁
begin
if @condition != ''
set @strsql = 'select top '+str(@pagesize)+' '+@columns+' from '+@tablename+
' where '+@condition+@strordertype
else
set @strsql = 'select top '+str(@pagesize)+' '+@columns+' from '+@tablename+@strordertype
end
else -- 其他頁
begin
if @condition !=''
set @strsql = 'select top '+str(@pagesize)+' '+@columns+' from '+@tablename+
' where '+@condition+' and '+@pkcolumn+@strtemp+'('+@pkcolumn+')'+' from (select top '+str((@currentpage-1)*@pagesize)+
' '+@pkcolumn+' from '+@tablename+@strordertype+') as tabtemp)'+@strordertype
else
set @strsql = 'select top '+str(@pagesize)+' '+@columns+' from '+@tablename+
' where '+@pkcolumn+@strtemp+'('+@pkcolumn+')'+' from (select top '+str((@currentpage-1)*@pagesize)+' '+@pkcolumn+
' from '+@tablename+@strordertype+') as tabtemp)'+@strordertype
end
end
exec (@strsql)
end
--儲存過程結束
/*測試*/
--分頁得到客房資訊列表測試
exec ***oup_getpageofrecords 20,2,'房間號=roomnum,
房間狀態=(select roomtypedes from roomtype where roomtypeid=room.roomtypeid),
房間狀態=(select rsdec from roomstatus where roomstatusid=room.roomstatusid),
床位數=bednum,
樓層=floors,
描述=roomdes,
備註=roomremark','room','','roomid',0,'roomid'
--根據房間號得到客房資訊測試
exec ***oup_getpageofrecords 1,1,'房間號=roomnum,
房間狀態=(select roomtypedes from roomtype where roomtypeid=room.roomtypeid),
房間狀態=(select rsdec from roomstatus where roomstatusid=room.roomstatusid),
bednum,
floors,
roomdes,
roomremark','room','roomnum=304','roomid',0,'roomid'
--· 得到客房型別資訊列表測試
exec ***oup_getpageofrecords 10,1,'roomtypedes,price,area,addbed,maxbednum,bedprice,hourroom,hourprice,remark','roomtype','','roomtypeid',0,'roomtypeid'
通用分頁儲存過程
create procedure sp page strtable varchar 50 表名 strcolumn varchar 50 按該列來進行分頁 intcoltype int,strcolumn列的型別,0 數字型別,1 字元型別,2 日期時間型別 intorder bit,排序,0 順序...
通用分頁儲存過程
set quoted identifier on goset ansi nulls off go declare p1 int set p1 null exec sp pageview tbname n v question list fieldkey n id pagecurrent 3,page...
通用分頁儲存過程
通用分頁儲存過程 create proc commonpagination columns varchar 500 要顯示的列名,用逗號隔開 tablename varchar 100 要查詢的表名 ordercolumnname varchar 100 排序的列名 order varchar 50...