create procedure DataPage
@TableName nvarchar(100), --数据库表名
@SelectColumnName nvarchar(1000) = '' , --查询的列名
@SelectWhere nvarchar(1500) = '', --查询的条件
@OrderColumnName nvarchar(255) = '', --排序的字段 (不能为空)
@OrderType bit = 0, --排序类型 (0:升序 非0:降序)
@PageSize int = 10, --每页数据条数
@PageIndex int = 1, --当前页码
@RecordTotal int output --记录总数
as
set nocount on
declare @StrTotalSQL nvarchar(4000)
declare @StrSQL nvarchar(4000)
declare @StrTemp nvarchar(1000)
declare @StrOrder nvarchar(1000)
--记录总数
if @SelectWhere != ''
set @StrTotalSQL = 'select @RecordTotal=count(*) from ' + @TableName + ' where ' + @SelectWhere
else
set @StrTotalSQL = 'select @RecordTotal=count(*) from ' + @TableName
if @OrderType != 0
begin
set @StrTemp = '<(select min'
set @StrOrder = 'order by ' + @OrderColumnName + ' desc'
end
else
begin
set @StrTemp = '>(select max'
set @StrOrder = 'order by ' + @OrderColumnName + ' asc'
end
if @PageIndex = 1
begin
if @SelectWhere != ''
set @StrSQL = 'select top ' + str(@PageSize) + ' ' + @SelectColumnName + ' from ' + @TableName + ' where ' + @SelectWhere + ' ' + @StrOrder
else
set @StrSQL = 'select top ' + str(@PageSize) + ' ' + @SelectColumnName + ' from ' + @TableName + ' ' + @StrOrder
end
else
begin
set @OrderColumnName = substring(@OrderColumnName,charindex('.',@OrderColumnName)+1,len(@OrderColumnName) - charindex('.',@OrderColumnName))
if @SelectWhere = ''
set @StrSQL = 'select top ' + str(@PageSize) + ' ' + @SelectColumnName + ' from '
+ @TableName + ' where ' + @OrderColumnName + '' + @StrTemp
+ '(' + @OrderColumnName + ') from (select top ' + str((@PageIndex - 1) * @PageSize)
+ ' ' + @OrderColumnName + ' from ' + @TableName + ' ' + @StrOrder + ') as TempColumn) '
+ @StrOrder
else
set @StrSQL = 'select top ' + str(@PageSize) + ' ' + @SelectColumnName + ' from '
+ @TableName + ' where ' + @OrderColumnName + '' + @StrTemp
+ '(' + @OrderColumnName + ') from (select top ' + str((@PageIndex - 1) * @PageSize)
+ ' ' + @OrderColumnName + ' from ' + @TableName + ' where ' + @SelectWhere + ' ' + @StrOrder + ') as TempColumn) and '
+ @SelectWhere + ' ' + @StrOrder
end
execute sp_executesql @StrTotalSQL,N'@RecordTotal int output',@RecordTotal output
execute (@StrSQL)
GO