SQL 通用分頁存儲過程

 

CREATE PROCEDURE sp_GetRecordFromPage
    
@fldName      Varchar(2000),    -- 顯示字段名
    @strFrom      Varchar(2000),    -- 關鍵字From後的表名(注意:不用加From)
    @strWhere     Varchar(2000),    -- 查詢條件 (注意: 不要加 where)
    @strOrder     Varchar(200),    -- 排序字段名
    @OrderType    Bit = 0,              -- 默認0:倒序,非0: 升序
    @PageSize     Int = 10,                        -- 記錄條數
    @PageIndex    Int = 1                          -- 頁碼
      
AS

Declare @strSQL      Varchar(8000)       -- 主語句
Declare @strTmp      Varchar(1000)       -- 臨時變量
Declare @strOrderBy  Varchar(500)        -- 排序類型


If @strWhere =''
   
Begin
        
Set @strWhere = '1=1'    
   
End
If @OrderType != 0
   
Begin    
    
Set @strTmp = '< (Select Min(' + SubString(@strOrder,CharIndex('.',@strOrder)+1,200+ ')'
       
Set @strOrderBy = ' Order By '+ @strOrder + ' Desc '
   
End
Else
   
Begin
    
Set @strTmp = '> (Select Max(' + SubString(@strOrder,CharIndex('.',@strOrder)+1,200+ ')'
       
Set @strOrderBy = ' Order By '+ @strOrder +' Asc '
   
End         
       
If @PageIndex = 1 
   
Begin
    
Set @strSQL = ' Select Top ' + Str(@PageSize+' ' +  @fldName + ' From ' + @strFrom +
              
' Where ' + @strWhere + @strOrderBy
   
End 
Else
   
Begin
    
          
Set @strSQL = 'Select Top ' + Str(@PageSize+ ' ' + @fldName + ' From ' + @strFrom 
+' Where '+  @strWhere + ' And '+ @strOrder + '  '+  @strTmp + ' From ( '
+' Select  Top ' + Str((@PageIndex-1)*@PageSize+ ' ' + @fldName + '  From  '
+ @strFrom + ' Where ' +  @strWhere + ' ' + @strOrderBy + ' ) As tblTemp )'+ @strOrderBy
   
End    
    

--print (@strSQL)
Exec (@strSQL)
--返回記錄總數
Exec('Select Count(*) As RecordCount From ' + @strFrom + ' Where ' + @strWhere)
--Exec sp_GetRecordFromPage '顯示字段名','表名','查詢條件','排序列名',排序方式,頁大小,頁碼
--
Exec sp_GetRecordFromPage 'RoleId,RoleName','Roles','','RoleName',0,3,2
Go

參考網上資料,自己再修改,練習SQL分頁存儲過程.支持多表聯合查詢.未經過正規測試(還不懂,要學習),性能一般.歡迎指點.

調用方法可以,暫時想到就這三種:

1.

Exec sp_GetRecordFromPage 'RoleId,RoleName','Roles','','RoleName',0,3,2

Exec sp_GetRecordFromPage 'U.*,R.RoleName','  Users U  Inner Join Roles R On U.Roleid = R.Roleid ','1=1','R.Roleid',0,1,1

 3.

Exec sp_GetRecordFromPage  'U.*,(Select RoleName From Roles R Where R.RoleId = U.Roleid) Rolename','  Users U ','1=1','U.Roleid',0,1,1

 

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