CREATE PROCEDURE P_GetPage1
(
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 主键字段名
@pageSize int=10, -- 分页大小
@pageIndex int=1, -- 页码
@doCount bit=0, -- 返回记录总数, 1 值则返回
@orderType bit=0, -- 设置排序类型, 非 0 值则降序
@orderField varchar(255), -- 排序字段名
@strWhere varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
)
AS
SET NOCOUNT ON
declare @strSQL varchar(2000) -- 主语句
declare @strTmp varchar(2000) -- 临时变量
if(@doCount=1)
BEGIN
IF @strWhere!=''
SET @strSQL='SELECT COUNT(*) FROM '+@tblName+' WHERE '+@strWhere
ELSE
BEGIN
SET @strSQL='SELECT COUNT(*) FROM '+@tblName
END
EXEC (@strSQL)
END
else
BEGIN
create table #indextable(id INT IDENTITY(1,1),nid varchar(36))
DECLARE @PageLowerBound INT
DECLARE @PageUpperBound INT
SET @PageLowerBound=(@pageindex-1)*@pagesize
SET @PageUpperBound=@PageLowerBound+@pagesize
SET ROWCOUNT @PageUpperBound
SET @strTmp=' INSERT INTO #indextable(nid) SELECT '+@fldName+ ' FROM '+@tblName+' ORDER BY '+@orderField
IF @orderType=0
SET @strTmp=' INSERT INTO #indextable(nid) SELECT '+@fldName+ ' FROM '+@tblName+' ORDER BY '+@orderField+' ASC'
ELSE
BEGIN
SET @strTmp=' INSERT INTO #indextable(nid) SELECT '+@fldName+ ' FROM '+@tblName+' ORDER BY '+@orderField+' DESC'
END
EXEC (@strTmp)
SET @strSQL='SELECT * FROM '+@tblName+' O,#indextable t WHERE O.'+@fldName+'=t.nid
and t.id between '+CAST((@PageLowerBound+1) AS NVARCHAR(10))+' and '+CAST(@PageUpperBound AS NVARCHAR(36))+' ORDER BY t.id'
EXEC (@strSQL)
END
SET NOCOUNT OFF