sql 存储过程 分页
来源:互联网 发布:lol mac美服鼠标乱动 编辑:程序博客网 时间:2024/05/29 08:43
-- FUN:存储过程分页
-- @Table nvarchar(255), -- 表名
-- @Fields nvarchar(1000) = ' * ', -- 需要返回的列
-- @OrderField nvarchar(255), -- 排序的字段名,一般为唯一标识
-- @OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
-- @PageSize int = 10, -- 每页有多少条记录
-- @PageIndex int = 1, -- 第几页
-- @Count int output, -- 返回记录总数
-- @StrWhere nvarchar(1500) -- 查询条件 (注意: 不要加 where,初始化为1=1使得查询条件永远不为空)
----------------------------------------------------------
ALTER PROC [dbo].[PR_pages]
(
@Table nvarchar(4000), -- 表名
@Fields nvarchar(1000) = ' * ', -- 需要返回的列
@OrderField nvarchar(255), -- 排序的字段名,一般为唯一标识
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@PageSize int = 10, -- 每页有多少条记录
@PageIndex int = 1, -- 第几页
@StrWhere nvarchar(1500), -- 查询条件 (注意: 不要加 where,初始化为1=1使得查询条件永远不为空)
@Count int output -- 返回记录总数
)
AS
BEGIN
DECLARE @StrSQL nvarchar(4000) -- 主语句
DECLARE @StrTmp nvarchar(110) -- 临时变量
DECLARE @StrOrder nvarchar(400) -- 排序类型
DECLARE @SumSql nvarchar(4000) -- 记录总数
--SET @StrWhere = ' 1=1 '
-- 执行总数统计
SET @SumSql = 'SELECT @Count = COUNT(0) FROM ' + @Table + ' WHERE 1=1 ' + @StrWhere
EXEC sp_executesql @SumSql,N'@Count int output',@Count output -- 记录总数
-- 如果@OrderType不是0,就执行降序
IF @OrderType != 0
BEGIN
SET @StrTmp = ' <(SELECT MIN'
SET @StrOrder = ' ORDER BY [' + @OrderField + '] DESC'
END
ELSE
BEGIN
SET @StrTmp = ' >(SELECT MAX'
SET @StrOrder = ' ORDER BY [' + @OrderField + '] ASC'
END
-- 如果是第一页就执行以下代码,加快执行速度
IF @PageIndex = 1
BEGIN
SET @StrSQL = 'SELECT TOP ' + STR(@PageSize) +' '+@Fields+ '
FROM ' + @Table + ' WHERE 1=1 ' + @StrWhere + ' ' + @StrOrder
END
ELSE
BEGIN
--以下代码赋予了@strSQL以真正执行的SQL代码
SET @StrSQL = 'SELECT TOP ' + str(@PageSize) +' '+@Fields+ ' FROM '
+ @Table + ' WHERE 1=1 AND [' + @OrderField + ']' + @StrTmp + '(['
+ @OrderField + ']) FROM (SELECT TOP ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @OrderField + '] from ' + @Table + ' WHERE 1=1 ' + @StrWhere + ' '
+ @StrOrder + ') AS tblTmp) ' + @StrWhere + ' ' + @StrOrder
END
--PRINT @StrSQL
EXEC(@StrSQL)
END
2:
public enum OrderType
{
ASC = 0,
DESC = 1,
}
3:
public class AppPages
{
public AppPages();
public int Count { get; set; }
public string Fields { get; set; }
public string OrderField { get; set; }
public OrderType OrderType { get; set; }
public int? PageIndex { get; set; }
public int PageNum { get; }
public int PageSize { get; set; }
public string PrimaryKey { get; set; }
public string StrWhere { get; set; }
public string Table { get; set; }
}
4:
/// <summary>
/// 分页
/// </summary>
/// <param name="mo_pages"></param>
/// <returns></returns>
public DataTable GetPages(AppPages pages)
{
SqlParameter[] parms =
{
VSHelper.MakeInParam("@Table", SqlDbType.NVarChar, 4000, pages.Table),
VSHelper.MakeInParam("@Fields",SqlDbType.NVarChar,1000,pages.Fields),
VSHelper.MakeInParam("@OrderField",SqlDbType.NVarChar,255,pages.OrderField),
VSHelper.MakeInParam("@OrderType",SqlDbType.Int,4,pages.OrderType),
VSHelper.MakeInParam("@PageSize",SqlDbType.Int,4,pages.PageSize),
VSHelper.MakeInParam("@PageIndex",SqlDbType.Int,4,pages.PageIndex),
VSHelper.MakeInParam("@StrWhere",SqlDbType.NVarChar,1500,pages.StrWhere),
VSHelper.MakeOutParam("@Count",SqlDbType.Int,4)
};
DataTable dt = VSHelper.ExecProcDataTable("PR_pages", parms);
pages.Count = int.Parse(parms[7].Value.ToString());
return dt;
}
- sql 存储过程分页
- sql 存储过程分页
- sql分页存储过程
- sql分页存储过程
- sql 存储过程分页
- sql 存储过程分页
- SQL 存储过程---分页
- 分页存储过程--sql
- sql存储过程 分页
- sql 存储过程分页
- SQL 分页存储过程
- SQL分页存储过程
- sql分页存储过程
- SQL分页存储过程
- sql分页存储过程
- SQL ----存储过程分页
- SQL分页存储过程
- SQL----分页存储过程
- sql命令笔记
- U-Boot 的移植(一)
- SQL SERVER 2008 通过链接服务器(Linked Server)访问 ORACLE 9i /10g的方法 (亲测)
- TPM emulator安装说明
- c++基本语法
- sql 存储过程 分页
- Oracle 10g 在linux redhat as4 系统安装图解全过程(單機)
- LAMP企业级架构(一)
- 面向对象方法中的数据库设计
- 理解MySQL数据类型
- 遍历records中的数据
- 持续关注云风的写不出书,和某些的人的写书天下第一
- C++基本语法(中)
- wince5下directdraw初体验