分页存储过程
来源:互联网 发布:淘宝羽绒服女款 编辑:程序博客网 时间:2024/04/30 06:19
调用实例:
EXEC up_Pagition 'datatable','id','*',pageSize,pageIndex,'','','id asc'
------------------------- 代码开始 ------------------------------
CREATE PROCEDURE [dbo].[up_Pagition]
@tableNames VARCHAR(200), --表名,可以是多个表,但不能用别名
@primaryKey VARCHAR(100), --主键,可以为空,但 @order为空时该值不能为空
@fields VARCHAR(200), --要取出的字段,可以是多个表的字段,可以为空,为空表示select *
@pageSize INT, --每页记录数
@currentPageIndex INT, --当前页,0表示第1页
@filter VARCHAR(200) = '', --条件,可以为空,不用填 where
@group VARCHAR(200) = '', --分组依据,可以为空,不用填 group by
@order VARCHAR(200) = '' --排序,可以为空,为空默认按主键升序排列,不用填 order by
AS
BEGIN
DECLARE @sortColumn VARCHAR(200)
DECLARE @operator CHAR(2)
DECLARE @sortTable VARCHAR(200)
DECLARE @sortName VARCHAR(200)
IF @fields = ''
SET @fields = '*'
IF @filter = ''
SET @filter = 'WHERE 1=1'
ELSE
SET @filter = 'WHERE ' + @filter
IF @group <>''
SET @group = 'GROUP BY ' + @group
IF @order <> ''
BEGIN
DECLARE @pos1 INT, @pos2 INT
SET @order = REPLACE(REPLACE(@order, ' asc', ' ASC'), ' desc', ' DESC')
IF CHARINDEX(' DESC', @order) > 0
IF CHARINDEX(' ASC', @order) > 0
BEGIN
IF CHARINDEX(' DESC', @order) < CHARINDEX(' ASC', @order)
SET @operator = '<='
ELSE
SET @operator = '>='
END
ELSE
SET @operator = '<='
ELSE
SET @operator = '>='
SET @sortColumn = REPLACE(REPLACE(REPLACE(@order, ' ASC', ''), ' DESC', ''), ' ', '')
SET @pos1 = CHARINDEX(',', @sortColumn)
IF @pos1 > 0
SET @sortColumn = SUBSTRING(@sortColumn, 1, @pos1-1)
SET @pos2 = CHARINDEX('.', @sortColumn)
IF @pos2 > 0
BEGIN
SET @sortTable = SUBSTRING(@sortColumn, 1, @pos2-1)
IF @pos1 > 0
SET @sortName = SUBSTRING(@sortColumn, @pos2+1, @pos1-@pos2-1)
ELSE
SET @sortName = SUBSTRING(@sortColumn, @pos2+1, LEN(@sortColumn)-@pos2)
END
ELSE
BEGIN
SET @sortTable = @tableNames
SET @sortName = @sortColumn
END
END
ELSE
BEGIN
SET @sortColumn = @primaryKey
SET @sortTable = @tableNames
SET @sortName = @sortColumn
SET @order = @sortColumn
SET @operator = '>='
END
DECLARE @type varchar(50)
DECLARE @prec int
SELECT @type=t.name, @prec=c.prec
FROM sysobjects o
JOIN syscolumns c on o.id=c.id
JOIN systypes t on c.xusertype=t.xusertype
WHERE o.name = @sortTable AND c.name = @sortName
IF CHARINDEX('char', @type) > 0
SET @type = @type + '(' + CAST(@prec AS varchar) + ')'
DECLARE @TopRows INT
SET @TopRows = @pageSize * @currentPageIndex + 1
print @TopRows
print @operator
EXEC('
DECLARE @sortColumnBegin ' + @type + '
SET ROWCOUNT ' + @TopRows + '
SELECT @sortColumnBegin=' + @sortColumn + ' FROM ' + @tableNames + ' ' + @filter + ' ' + @group + ' ORDER BY ' + @order + '
SET ROWCOUNT ' + @pageSize + '
SELECT ' + @fields + ' FROM ' + @tableNames + ' ' + @filter + ' AND ' + @sortColumn + '' + @operator + '@sortColumnBegin ' + @group + ' ORDER BY ' + @order + '
')
END
- orcale分页 存储过程分页
- 一个分页存储过程
- 一个分页存储过程
- 存储过程分页代码
- 分页存储过程
- 数据库分页存储过程
- 分页存储过程
- 一个分页存储过程
- 分页 SQLServer存储过程
- 分页 SQLServer存储过程
- 存储过程分页
- SqlServer分页存储过程
- 分页的存储过程
- 通用分页存储过程
- sql 存储过程分页
- 分页存储过程
- 分页存储过程2
- 分页的存储过程
- J2ME报域名不正确
- Big Endian与Little Endian区别
- 20. 二级缓存(SessionFactory级缓存)
- TCP Server《——》TCP Client
- 多桌面切换
- 分页存储过程
- 使用wxWidgets开发应用程序时的VC++配置
- 分析碰撞检测库Opcode
- 一种3D游戏碰撞检测解决方案
- 开普勒三定律
- 取得真经100年之后的唐僧--值得沉思
- Oracle 存储过程
- 2010 风雨年 --- 努力 坚持 坚信风雨无阻
- 自己动手启动计算机