alter PROCEDURE [dbo].[CommonPage](
@tblName varchar(255),--表名
@OrderName varchar(20),--主键,排序
@FldName varchar(255)=\'*\', --显示的字段
@PageSize int = 10, --页码
@PageIndex int = 1, --当前页
@OrderType bit = 0, --排序类型
@strWhere varchar(2000) = \'\' --查询条件
)
AS
declare @rowCount int
declare @strSQL nvarchar(3000)
declare @strTmp varchar(1000)
declare @strOrder varchar(500)
if @OrderType != 0
begin
set @strTmp = \'<(select min\'
set @strOrder = \' order by [\' + @OrderName + \'] desc\'
end
else
begin
set @strTmp = \'>(select max\'
set @strOrder = \' order by [\' + @OrderName +\'] asc\'
end
set @strSQL = \'select top \' + str(@PageSize) + @FldName+\' from [\'
+ @tblName + \'] where [\' + @OrderName + \']\' + @strTmp + \'([\'
+ @OrderName + \']) from (select top \' + str((@PageIndex-1)*@PageSize) + \' [\'
+ @OrderName + \'] from [\' + @tblName + \']\' + @strOrder + \') as tblTmp)\'
+ @strOrder
if @strWhere != \'\'
set @strSQL = \'select top \' + str(@PageSize) + @FldName+\' from [\'
+ @tblName + \'] where [\' + @OrderName + \']\' + @strTmp + \'([\'
+ @OrderName + \']) from (select top \' + str((@PageIndex-1)*@PageSize) + \' [\'
+ @OrderName + \'] from [\' + @tblName + \'] where \' + @strWhere + \' \'
+ @strOrder + \') as tblTmp) and \' + @strWhere + \' \' + @strOrder
if @PageIndex = 1
begin
set @strTmp = \'\'
if @strWhere != \'\'
set @strTmp = \' where (\' + @strWhere + \')\'
set @strSQL = \'select top \' + str(@PageSize) + @FldName+\' from [\'
+ @tblName + \']\' + @strTmp + \' \' + @strOrder
end
if @strWhere!=\'\'
set @strSQL =@strSQL+ \' select @total=count(*) from [\' + @tblName + \'] where \'+@strWhere
else
set @strSQL =@strSQL+ \' select @total=count(*) from [\' + @tblName + \']\'
--print @strSQL
exec sp_executesql @strSQL,N\'@total int output\',@rowCount output
GO