-- 獲取指定頁的數據 
CREATE PROCEDURE pagination 
@tblName varchar(255), -- 表名 
@strGetFields varchar(1000) = '*', -- 需要返回的列 
@fldName varchar(255)='', -- 排序的字段名(可包含如TABLE.FLDNAME形式) 
@PageSize int = 10, -- 頁尺寸 
@PageIndex int = 1, -- 頁碼 
@doCount bit = 0, -- 返回記錄總數, 非 0 值則返回 
@OrderType bit = 0, -- 設置排序類型, 非 0 值則降序 
@strWhere varchar(1500) = '' -- 查詢條件 (注意: 不要加 where) 
AS 
declare @strSQL varchar(5000) -- 主語句 
declare @strTmp varchar(110) -- 臨時變量 
declare @strOrder varchar(400) -- 排序類型 
declare @fldName_t varchar(255) -- 在分頁時用的排序字段名,不包含多表并列時的表名 
set @fldName_t = right(@fldName,len(@fldName)-CHARINDEX('.',@fldName)) 
if @doCount != 0 
begin 
if @strWhere !='' 
set @strSQL = 'select count(*) as Total from ' + @tblName + ' where '+@strWhere 
else 
set @strSQL = 'select count(*) as Total from ' + @tblName + '' 
end 
--以上代碼的意思是如果@doCount傳遞過來的不是0,就執行總數統計。以下的所有代碼都是@doCount為0的情況 
else 
begin 
if @OrderType != 0 
begin 
set @strTmp = '<(select min' 
set @strOrder = ' order by ' + @fldName +' desc' 
--如果@OrderType不是0,就執行降序,這句很重要! 
end 
else 
begin 
set @strTmp = '>(select max' 
set @strOrder = ' order by ' + @fldName +' asc' 
end 
if @PageIndex = 1 
begin 
if @strWhere != '' 
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from ' + @tblName + ' where ' + @strWhere + ' ' + @strOrder 
else 
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' '+ @strOrder 
--如果是第一頁就執行以上代碼,這樣會加快執行速度 
end 
else 
begin 
--以下代碼賦予了@strSQL以真正執行的SQL代碼 
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' where ' + @fldName + ' ' + @strTmp + ' ('+ @fldName_t + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + ' from ' + @tblName + '' + @strOrder + ') as tblTmp)'+ @strOrder 
if @strWhere != '' 
set @strSQL = 'select top ' + str(@PageSize) +' '+@strGetFields+ ' from '+ @tblName + ' where ' + @fldName + ' ' + @strTmp + ' ('+ @fldName_t + ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @fldName + ' from ' + @tblName + ' where ' + @strWhere + ' '+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder 
end 
end 
exec (@strSQL) 
GO 
新聞熱點
疑難解答