分页存储过程
来源:互联网 发布:软件项目质量计划书 编辑:程序博客网 时间:2024/05/01 05:29
/******************************************************************
== 分页存储过程SQL版 ==
--------------------------------------------------------------
-使用说明:
1、数据库必须建立以ID命名的字段作为主键
2、一般不用设置@SortKey参数,使用默认值ID
3、@Orders 参数需要输入 Order By
4、@Wheres 参数不要输入 Where
5、设置@doCount=0进行分页
6、多表联查需要如下方式:
set @TblName='(select a.id,a.name,b.typename as uTypeName from Table1 as a join Table2 as b on a.typeid=b.id)as Tbl'
//注意,多表联查,不用设置@Fields参数,应为字段已经包含再内
******************************************************************/
ALTER PROCEDURE SP_Page_Exec
(
@TblName varchar(255), -- 表名及表集合
@Fields varchar(1000) , -- 列名及字段集合
@SortKey varchar(255) , -- 排序的字段名
@OrderType varchar(50) = 'ASC', -- 排序类型
@Orders varchar(2000) = '', -- 排序条件
@Wheres varchar(2000) = '', -- 查询条件 (不要加 where)
@PageSize int = 10, -- 页长
@PageIndex int = 1, -- 当前页
@doCount bit = 0 -- 返回记录总数, 0分页,1返回总记录数
)
AS
declare @strSQL varchar(5000) -- 主语句
declare @strTmp varchar(200) -- 临时变量
declare @strOrder varchar(400) -- 排序类型
-------------------------------如果 @doCount!=0,就执行总数统计,Total为统计值----------------
IF @doCount != 0
begin
if @Wheres !=''
set @strSQL = 'select count(*) as Total from ' + @TblName + ' where '+@Wheres
else
set @strSQL = 'select count(*) as Total from ' + @TblName + ''
end
------------------------------ 以下的所有代码都是@doCount=0的情况 ---------------------------
ELSE
Begin
---- 如果 @OrderType!=Asc,就执行降序 DESC ! ----
If @OrderType != 'ASC'
Begin
Set @strTmp = '<(select min'
Set @strOrder = ' order by ' + @SortKey +' desc'
End
Else
Begin
Set @strTmp = '>(select max'
Set @strOrder = ' order by ' + @SortKey +' asc'
End
If @Orders = ''
Set @Orders=@strOrder
----- 如果是第一页 -----
If @PageIndex = 1
Begin
if @Wheres != ''
set @strSQL = 'select top ' + str(@PageSize) +' '+ @Fields + ' from ' + @TblName + ' where ' + @Wheres + ' ' + @strOrder
else
set @strSQL = 'select top ' + str(@PageSize) +' '+ @Fields + ' from '+ @TblName + ' '+ @strOrder
End
---- 以下为真正分页代码 ----
Else
Begin
If @Wheres != ''
Begin
Set @strSQL = 'select top ' + str(@PageSize) +' '+@Fields+ ' from ' + @TblName
+ ' where ' + @SortKey + '' + @strTmp + '(' + @SortKey
+ ') from (select top ' + str((@PageIndex-1)*@PageSize) + ' '+ @SortKey + ' from ' + @TblName + ' where ' + @Wheres + ' ' + @strOrder + ') as TbTb) and ' + @Wheres + ' '
+@Orders -- + @strOrder
End
Else
Begin
Set @strSQL = 'select top ' + str(@PageSize) +' '+ @Fields + ' from '+ @TblName
+ ' where ' + @SortKey + @strTmp + '('+ @SortKey
+ ') from (select Top ' + str((@PageIndex-1)*@PageSize) + ' '+ @SortKey + ' from ' + @TblName + ' ' + @strOrder + ') as TbTb)'
+@Orders -- + @strOrder
End
End
END
exec(@strSQL)
ALTER Procedure SP_ExecSql
(
@sql nvarchar(4000)
)
AS
exec sp_executesql @sql
- orcale分页 存储过程分页
- 一个分页存储过程
- 一个分页存储过程
- 存储过程分页代码
- 分页存储过程
- 数据库分页存储过程
- 分页存储过程
- 一个分页存储过程
- 分页 SQLServer存储过程
- 分页 SQLServer存储过程
- 存储过程分页
- SqlServer分页存储过程
- 分页的存储过程
- 通用分页存储过程
- sql 存储过程分页
- 分页存储过程
- 分页存储过程2
- 分页的存储过程
- JAVA环境变量的配置
- vc多线程编程
- 2分钟让你明白什么是ERP
- Linux中如何校验哪些端口正在监听
- 深入解析 Windows Mobile 5.0 Smartphone 版
- 分页存储过程
- 令人迷糊的网络技术概念
- 有效的友情连接策略
- WPF SP1新功能—StringFormat
- 从DOS下装系统
- 有没有在成都业余做网站源码的
- IE与FF中兼容
- SQL外部链接解决方案 实例
- WINDOWS智能手机扫盲