網站知識
     搜索引擎 / Search
     推廣文庫 / SEO
     推薦工具 / Tools
     網站教程 /Tutorial
  
  我們做什么
  網站建設·網頁設計 (
  網站策劃·網站推廣 (
  雅虎口碑壹推廣 (ko
  谷歌搜索競價 (Goo
  網站評估診斷 (Goo
  全站動畫·創意設計 (
 
   您的位置在:首頁 > 內蒙古巴彥淖爾市力天網絡科技有限公司 > 網站知識
   網站知識
SqlServer2005通用分頁存儲過程
[ 來源:新睿網   發布日期:2012-3-29 20:20:06 ]
收藏到: Del.icio.us Google書簽 Digg Live Bookmark Furl Yahoo書簽 Facebook 百度搜藏 新浪ViVi 365Key網摘 天極網摘 和訊網摘 博拉網 POCO網摘 添加到飯否 QQ書簽 Digbuzz我挖網
從網上看了很多分頁的存儲過程,沒有發現一個所有表通用的!也許有更高的招,只是我自己不知道而已,特發此貼,以集思廣益。

  我先發一個我自己寫的通用分頁存儲過程,希望前輩、哥哥姐姐、弟弟妹妹們批評指正,本人不勝感激。

代碼
--@Columns          要得到的列
--
@TableName        表名(可做聯合查詢)
--
@Condition        查詢條件
--
@OrderBy          排序規則
--
@PageNum          第幾頁
--
@PageSize         每頁有多少務記錄
--
@PageCount        輸出總頁數
--
@RecordCount      輸出總記錄數
Create Procedure proc_CurrencyPage
(
    
@Columns        varchar(max),
    
@TableName      varchar(max),
    
@Condition      varchar(max),
    
@OrderBy        varchar(max),
    
@PageNum        int,
    
@PageSize       int,
    
@PageCount      int output,
    
@RecordCount    bigint output
)
AS
    
DECLARE @Sql nvarchar(max);
    
Set @Sql = 'Select @CountOut = Count(*) From ' + @TableName + ' Where ' + @Condition;
    
EXEC sp_executesql @Sql,N'@CountOut INT OUTPUT',@CountOut = @RecordCount OUTPUT;

    
Set @PageCount = @RecordCount / @PageSize;
    
IF(@RecordCount % @PageSize > 0Set @PageCount = @PageCount + 1;
    
IF(@PageNum < 1Set @PageNum = 1;
    
IF(@PageNum > @PageCountSet @PageNum = @PageCount;
    
Declare @BRowNum int,@ERowNum int;
    
Set @BRowNum = (@PageNum - 1* @PageSize;
    
Set @ERowNum = @BRowNum + @PageSize;
    
Set @Sql = 
       
'Select * From (
            Select 
'+@Columns+', ROW_NUMBER() Over(Order By ' + @OrderBy + ') As RowNum 
            From 
' + @TableName + ' 
            Where 
' + @Condition + '
        ) as TempT 
        Where RowNum > 
' + Convert(varchar(10),@BRowNum+ ' 
              And 
              RowNum <= 
' + Convert(varchar(10),@ERowNum+ ' 
              Order By 
' + @OrderBy;
    
Exec(@Sql);
GO

--測試:
Declare @Columns     varchar(max)
Declare @TableName   varchar(max)
Declare @Condition   varchar(max)
Declare @OrderBy     varchar(max)
Declare @PageNum     int
Declare @PageSize    int
Declare @PageCount   int
Declare @RecordCount bigint

set @Columns = 'ID,ReportID,ReportCondition'
set @TableName = '[PSYT_TS_ReportSort]'
set @Condition = 'ReportSort = ''Z'''
set @ORDERBY = 'ID'
set @PageNum = 2
set @PageSize=20

Exec proc_CurrencyPage @Columns,@TableName,@Condition,@ORDERBY,@PageNum,@PageSize,@PageCount output,@RecordCount output
首頁 | 公司簡介 |聯系方式 |付款方式 |人才招聘 | 域名空間 | 網頁設計案例 | 網站知識 | 解決方案 | 建站指南
Copyright © 2011-2015 內蒙古巴彥淖爾市力天網絡科技有限公司 All rights reserved
地址:內蒙古巴彥淖爾市中興水郡西座212   郵編:015000   E- Mail:981268907@qq.com
咨詢QQ:981268907 聯系電話:13354789303
昨天福建快3开奖结果