SQL SERVER 2005分頁儲存過程
CREATE PROCEDURE [dbo].[TopPageList]
@strTable varchar(200), --表名 ("@strTable", "myUser");
@strColumn varchar(50), --按該列來進行分頁 ("@strColumn", "UserId");
@strOrderColumn varchar(50), --排序欄位order by XXX desc
@intOrder int,--排序的順序 0 升序 1降序
@strColumnlist varchar(150) , --要查詢出的欄位列表,*表示全部欄位 cmd.Parameters.Add("@strColumnlist", "*");
@strWhere varchar(800)='', --查詢條件 cmd.Parameters.Add("@strWhere", "");
@intPageSize int, --每頁記錄數 cmd.Parameters.Add("@intPageSize", 15);
@intPageNum int, --指定頁 cmd.Parameters.Add("@intPageNum", 5);
-- @intPageCount int OUTPUT , --總頁數 SqlParameter paramPageCount = cmd.Parameters.Add("@intPageCount", SqlDbType.Int);
-- paramPageCount.Direction = ParameterDirection.Output;
@itemCount int OUTPUT
-- @doCount bit = 0, -- 返回, 非值則返回記錄總數
AS
--設定相應的空格
--設定DESC ASC
if @intOrder=0 --0升序
set @strOrderColumn=' order by '+@strOrderColumn
else --降序
set @strOrderColumn=' order by '+@strOrderColumn +' desc '
DECLARE @sql nvarchar(2000) --用於構造SQL語句
DECLARE @where1 varchar(800) --構造條件語句
DECLARE @where2 varchar(800) --構造條件語句
IF @strWhere is null or rtrim(@strWhere)=''
-- 為了避免SQL關鍵字與欄位、表名等連在一起,首先為傳入的變數新增空格
BEGIN --沒有查詢條件
SET @where1=' WHERE '
SET @where2=' '
END
ELSE
BEGIN --有查詢條件
SET @where1=' WHERE ('+@strWhere+') AND '
SET @where2=' WHERE ('+@strWhere+') '
END
------構造SQL語句,計算總頁數。計算公式為總頁數= Ceiling ( 記錄個數/ 頁大小)
--計算總項數
SET @sql='SELECT @itemCount=COUNT('+@strColumn+') from '+@strTable +@where2
print(@sql)
EXEC sp_executesql @sql,N'@itemCount int OUTPUT',@itemCount OUTPUT
-- 1:直接計算 2:自己寫個分頁控制元件裡面設定一下也可以~!
-- set @intPageCount =floor(cast(@itemCount as float)/@intPageSize)
-- if @intPageCount
--
--執行SQL語句,計算總頁數,並將其放入@intPageCount變數中
--將總頁數放到查詢返回記錄集的第一個欄位前,此語句可省略
SET @strColumnlist=' '+ Cast(@itemCount as varchar(30)) + ' as itemCount,' +' '+ @strColumnlist
--+ Cast(@intPageCount as varchar(30)) + ' as PageCount,'
SET @sql='SELECT TOP '+ CAST(@intPageSize AS varchar) + @strColumnlist +
' FROM ' + @strTable + @where1 + ' '+
@strColumn + ' not in '+
' (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1) AS varchar) + ' ' +
@strColumn + ' FROM '+ @strTable+@where2+@strOrderColumn+') ' + @strOrderColumn
print(@sql)
--ELSE
-- begin --構造降序的SQL ---針對2個表的時候會出現聚合函式的異常--適合單個表格的資料庫分頁操作
-- SET @sql='SELECT TOP '+ CAST(@intPageSize AS varchar) + @strColumnlist +
-- ' FROM ' + @strTable + @where1 + ' '+
-- @strColumn + ''+@strColumn+') '+
-- ' FROM (SELECT TOP '+ CAST(@intPageSize*(@intPageNum - 1) AS varchar) + ' ' +
-- @strColumn + ' FROM '+ @strTable+@where2+@strOrderColumn+') as tblTmp)' + @strOrderColumn
-- print(@sql)
-- end
IF @intPageNum=1--第一頁
SET @sql='SELECT TOP '+CAST(@intPageSize AS varchar) + @strColumnlist + ' FROM '+@strTable+
@where2+@strOrderColumn
--END
--PRINT @sql
print(@sql)
exec(@sql)
public static void BindingContent(string strTable, string strColumn, string strOrderColumn, int intOrder, string strColumnlist, string strWhere, IChangePageStored changePage)
{
SqlParameter[] paras=new SqlParameter[9];
paras[0] = new SqlParameter("@strTable" ,SqlDbType.VarChar);
paras[0].Value = strTable;
paras[1] = new SqlParameter("@strColumn", SqlDbType.VarChar);
paras[1].Value = strColumn;
paras[2] = new SqlParameter("@strOrderColumn", SqlDbType.VarChar);
paras[2].Value = strOrderColumn;
paras[3] = new SqlParameter("@strColumnlist", SqlDbType.VarChar);
paras[3].Value = strColumnlist;
paras[4] = new SqlParameter("@intOrder", SqlDbType.Int);
paras[4].Value = intOrder;
paras[5] = new SqlParameter("@strWhere", SqlDbType.VarChar);
paras[5].Value = strWhere;
paras[6] = new SqlParameter("@intPageSize", SqlDbType.Int);
paras[6].Value = changePage.PageSize;
paras[7] = new SqlParameter("@intPageNum", SqlDbType.Int);
paras[7].Value = changePage.CurrentPage ;
// paras[8] = new SqlParameter("@intPageCount", SqlDbType.Int);
// paras[8].Direction = ParameterDirection.Output;
paras[8] = new SqlParameter("@itemCount", SqlDbType.Int);
paras[8].Direction = ParameterDirection.Output;
DataSet ds = DBTool.ExecuteDataset(CommandType.StoredProcedure, "TopPageList", paras);
/* @intPageCount int OUTPUT , --總頁數 SqlParameter paramPageCount = cmd.Parameters.Add("@intPageCount", SqlDbType.Int);
-- paramPageCount.Direction = ParameterDirection.Output;
@strTable = N'zhq_in_content c INNER JOIN zhp_in_columns m ON c.columns_id=m.columns_id',
@strColumn = N'c.content_id',
@strOrderColumn = N'c.createdate',
@intOrder = 1,
@strColumnlist = N'*',
@strWhere = N'c.status=0 AND c.del=0',
@intPageSize = 20,
@intPageNum =100,*/
changePage.DataSource = ds.Tables[0].DefaultView;// 設定分頁控制元件的資料
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
changePage.RecordCount = int.Parse(ds.Tables[0].Rows[0]["itemCount"].ToString());
// changePage.PageCount = int.Parse(ds.Tables[0].Rows[0]["PageCount"].ToString());
}
if (changePage.DataUI.GetType().BaseType.Name == "BaseDataList")
{
changePage.DataUI.DataSource = changePage.DataSource;//設定資料來源控制元件的資料
changePage.DataUI.DataBind();
}
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-622798/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- (SQL Server)分頁的儲存過程SQLServer儲存過程
- SQL 分頁儲存過程SQL儲存過程
- sql儲存過程分頁SQL儲存過程
- 使用SQL Server 2005的新函式構造分頁儲存過程SQLServer函式儲存過程
- SQL Server 儲存過程的經典分頁(轉)SQLServer儲存過程
- 使用SQL Server2005的新函式構造分頁儲存過程SQLServer函式儲存過程
- SQLServer 2005通用分頁儲存過程SQLServer儲存過程
- 支援DISTINCT的通用分頁儲存過程(SQL2005)儲存過程SQL
- 【stswordman】SQL Server 2005: 儲存過程簽名SQLServer儲存過程
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- SQL Server 2000 的分頁查詢(儲存過程)SQLServer儲存過程
- SQL Server 儲存過程SQLServer儲存過程
- 【SQL Server】--儲存過程SQLServer儲存過程
- 兩種SQL分頁方法儲存過程和遊標儲存過程SQL儲存過程
- 分頁儲存過程儲存過程
- asp.net SQL Server 儲存過程分頁及程式碼呼叫ASP.NETSQLServer儲存過程
- 通用的SQL Server資料庫查詢分頁儲存過程SQLServer資料庫儲存過程
- MS SQL Server儲存過程SQLServer儲存過程
- Sql Server系列:儲存過程SQLServer儲存過程
- 解密SQL SERVER儲存過程解密SQLServer儲存過程
- SQL Server 2005的複製儲存過程選項BYSQLServer儲存過程
- 簡單談基於SQL SERVER 分頁儲存過程的演進SQLServer儲存過程
- 通用分頁儲存過程儲存過程
- SQL Server基礎:儲存過程SQLServer儲存過程
- sql server儲存過程語法SQLServer儲存過程
- SQL server儲存過程函式SQLServer儲存過程函式
- SqlServer-儲存過程分頁SQLServer儲存過程
- Q&A:在SQL Server 2005中編寫儲存過程RVSQLServer儲存過程
- Sql server 2005遷移至Oracle系列之二:生成儲存過程SQLServerOracle儲存過程
- SQL Server 儲存過程的運用SQLServer儲存過程
- SQL Server基礎之儲存過程SQLServer儲存過程
- oracle儲存過程分頁程式碼Oracle儲存過程
- 簡單的儲存過程分頁儲存過程
- 簡單的分頁儲存過程儲存過程
- Oracle 儲存過程分頁 + Sqlsugar呼叫Oracle儲存過程SqlSugar
- SQL 2000 2005通用儲存過程SQL儲存過程
- asp.net分頁的SQL語句及儲存過程ASP.NETSQL儲存過程
- SQL Server 禁用擴充套件儲存過程SQLServer套件儲存過程