使用存儲過程獲取分頁數據的Sql代碼

CREATE PROCEDURE [dbo].[PR_ListPage]     
@tblName      varchar(255),       -- 表名         
@OrderName      varchar(255),       -- 排序字段名     
@Fields       varchar(1000) = ' * ',      -- 返回的字段的集合      
@PageSize     int = 20,           -- 頁尺寸         
@PageIndex    int = 1,            -- 頁碼         
@IsCount      bit = 0,            -- 返回記錄總數, 非 0 值則返回         
@StrOrders     varchar(300) = '', -- 設置排序規則     
@strWhere     varchar(1000) = ''  -- 查詢條件 (注意: 不要加 where) 
AS    
declare @strSQL   varchar(1000)     -- 主語句     
declare @strTmp   varchar(300)      -- 臨時變量     
declare @StrOrder   varchar(300)      -- 臨時變量  
   
if @StrOrders != ''        
begin            
set @StrOrder=' order by ' + @StrOrders         
end         
set @strTmp = 'not in (select top ' + str(@PageSize-1)     
set @strSQL = 'select top ' + str(@PageSize)  + ' ' + @Fields+' from ' + @tblName + ' where ' + @OrderName + ' not in (select top ' + str((@PageIndex-1)*@PageSize) + ' ' + @OrderName + ' from ' + @tblName + ' ' + @strOrder + ')' + @strOrder           


if @strWhere != ''        
begin            
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @Fields+' from ' + @tblName + ' where ' + @OrderName + ' not in (select top ' + str((@PageIndex-1)*@PageSize) + ' ' + @OrderName + ' from ' + @tblName + ' where (' + @strWhere + ') ' + @strOrder + ') and (' + @strWhere + ') ' + @strOrder         
end    

if @PageIndex = 1         
begin              
set @strTmp = ''            
if @strWhere != ''                
set @strTmp = ' where (' + @strWhere + ')'            
set @strSQL = 'select top ' + str(@PageSize) + ' ' + @Fields+ ' from ' + @tblName + ' ' + @strTmp + ' ' + @strOrder         
end    
if @iscount !=0         
begin            
set @strTmp = ''            
if @strWhere != ''            
set @strTmp = ' where (' + @strWhere + ')'            
set @strSQL = 'select count(*) as Total from ' + @tblName + ' '+ @strTmp         
end      


exec (@strSQL)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章