MS SQLSERVER通用儲存過程分頁

2021-07-01 20:34:58 字數 2201 閱讀 2197

最近在面試的時候,遇到個奇葩的禿頂老頭面試官。

問:寫過儲存過程分頁嗎?

答:沒寫過,但是我知道分頁儲存的原理,我自己也寫過,只是在工作中沒寫過。

問:那你這麼多年工作中就沒寫過嗎?

答:的確沒寫過,因為專案資料量都特別小。

然後,這奇葩就起身就要走人了,連個招呼都沒有。想我面試了這麼多公司,這種奇葩面試官,還是頭回見到,一點職業素質,禮貌都木有。氣死我了!

明天要去入職新公司了,今天閒來無事,試著寫了寫這個儲存過程分頁。只在sqlserver2008上測試過,不過我想,2000以上版本應該都會支援的吧。

廢話到此,上**。

if (object_id('proc_paging', 'p') is not null)

drop proc proc_paging

gocreate procedure proc_paging

( @tablename varchar(20),--表名

@pageindex int=0,--起始頁索引,從0開始

@pagesize varchar(1000)='10',--預設每頁顯示的數量,預設每頁顯示10條記錄

@params varchar(100)='*',--分頁結果中顯示的字段,預設顯示全部的字段

@id varchar(20)='id',--資料編號排序字段,預設為id

@orderbyid varchar(20)='asc',--資料編號排序方式,預設為正序排序

@strwheresource varchar(100),--分頁資料的查詢條件,必須以where開頭

@strwherepaging varchar(100),--已經分頁的資料的查詢條件,不能以where開頭

@orderby varchar(100)='id asc'--資料排序方式)as

declare @sql varchar(8000),@pagestartnum varchar(1000),@pageendnum varchar(1000),@sql2 varchar(1000),@sql3 varchar(1000)

--1.獲取指定頁資料

set @pagestartnum=(@pageindex)*(@pagesize)--起始資料編號

set @pageendnum=(@pageindex+1)*(@pagesize)--截止資料編號

set @sql='select row_number() over(order by '+@id+' '+@orderbyid+') num,'+@params+' '+

'into #temp '+

'from '+@tablename+' '+@strwheresource+''+

'select * from #temp where num between '+

''+(@pagestartnum)+' and '+(@pageendnum)+' '+@strwherepaging+' order by '+@orderby+' '

exec(@sql)

--print @sql

--2.獲取總記錄數

set @sql2='select count(1) from '+@tablename+''

exec(@sql2)

--print @sql2

--3.獲取分頁總數

set @sql3='select ceiling(count(1)*1.0/('+@pagesize+')) from '+@tablename+''

exec(@sql3)

--print @sql3

go--測試**

exec proc_paging 'customers',2,10,'customerid,companyname,address,city,postalcode','customerid','asc','where postalcode>''1000'' ','and num>1 ','num asc'

go

下面是執行結果截圖。

執行結果:

生成的sql語句:

大神,勿噴;菜鳥,輕拍。謝謝!

MSSQLSERVER 儲存過程

系統儲存過程 列出sql server例項中的資料庫 sp databases 返回sql server 資料庫閘道器或基礎資料來源的特性名和匹配值的列表 sp server info 返回當前環境中的儲存過程列表 sp stored procedures 返回當前環境下可查詢的物件的列表 任何可出...

MS SQL Server儲存過程

1 create alter和drop create procedure usp categorylist asselect categoryid,categoryname from category 在建立儲存過程時,應該使用一致的規範來命名儲存過程,而不要使用sp 使用sp 只會導致名稱衝突和混...

MSSQLSERVER 根據姓名儲存姓名的拼音字段

1.申明乙個函式,用於名字到拼音的轉換 create function f getpy str nvarchar 4000 returns nvarchar 4000 asbegin declare py table ch char 1 hz1 nchar 1 collate chinese prc...