DataGrid自定義分頁存儲過程

CREATE proc page
--@t int output,--------------------------------------------------------------------------------------------
@RecordCount int output,
@QueryStr nvarchar(100)='table1',--表名、視圖名、查詢語句
@PageSize int=20,  --每頁的大小(行數)
@PageCurrent int=2,  --要顯示的頁 從0開始
@FdShow nvarchar (1000)='*', --要顯示的字段列表
@IdentityStr nvarchar (100)='id', --主鍵
@WhereStr nvarchar (200)='1=1',
@FdOrder nvarchar(100)='desc' --排序    只能取desc或者asc
as

set nocount on

declare
--@t1 datetime ,---------------------------------------------------------------------------------------------------------------------
@sql nvarchar(2000)
--set @t1 = getdate()----------------------------------------------------------------------------------------------

if @WhereStr = '' begin
 set @WhereStr = '1=1'
end

if(@RecordCount is null or @RecordCount<=0)begin
 declare @tsql nvarchar(200)
 set @tsql=N'select @RecordCount = count(*) from ' + @QueryStr + ' where ' + @WhereStr
 exec sp_executesql @tsql,N'@RecordCount int output',@RecordCount output
end

if @PageCurrent = 0 begin
 set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' ' + @FdOrder
end

else begin
 if upper(@FdOrder) = 'DESC' begin
  set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' and ' + @IdentityStr + '< ( select min(' + @IdentityStr + ') from (select top ' + cast(@PageSize*@PageCurrent as nvarchar(10)) + ' ' + @IdentityStr + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' desc) as t) order by ' + @IdentityStr + ' desc'
 end
 else begin
  set @sql = 'select top ' + cast(@PageSize as nvarchar(3)) + ' ' + @FdShow + ' from ' + @QueryStr + ' where ' + @WhereStr + ' and ' + @IdentityStr + '> ( select max(' + @IdentityStr + ') from (select top ' + cast(@PageSize*@PageCurrent as nvarchar(10)) + ' ' + @IdentityStr + ' from ' + @QueryStr + ' where ' + @WhereStr + ' order by ' + @IdentityStr + ' asc) as t) order by ' + @IdentityStr + ' asc'
 end
end
--print @sql
execute(@sql)
--select @t = datediff(ms,@t1,getdate())---------------------------------------------------------------------------
GO

發佈了80 篇原創文章 · 獲贊 0 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章