最近在面試的時候,遇到個奇葩的禿頂老頭面試官。
問:寫過儲存過程分頁嗎?
答:沒寫過,但是我知道分頁儲存的原理,我自己也寫過,只是在工作中沒寫過。
問:那你這麼多年工作中就沒寫過嗎?
答:的確沒寫過,因為專案資料量都特別小。
然後,這奇葩就起身就要走人了,連個招呼都沒有。想我面試了這麼多公司,這種奇葩面試官,還是頭回見到,一點職業素質,禮貌都木有。氣死我了!
明天要去入職新公司了,今天閒來無事,試著寫了寫這個儲存過程分頁。只在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...