CREATE proc [dbo].[GetPageInfo] @PageIndex int, @PageSize int, @TableName varchar(200), @FieldName varchar(200), @Sort varchar(10), @sqlCondition varchar(500) as declare @sqlstr nvarchar(4000) set @sqlstr='SELECT TOP '+ Convert(varchar,@PageSize)+ ' * FROM '+@TableName+' WHERE 1=1 '; if (@sqlCondition <>'') begin set @sqlstr= @sqlstr+' and '+@sqlCondition; end set @sqlstr= @sqlstr+' and '+@FieldName ; if (@Sort='asc') begin set @sqlstr= @sqlstr+' >=(select MAX(' ; end else begin set @sqlstr= @sqlstr+' <=(select MIN(' ; end set @sqlstr= @sqlstr+@FieldName+') FROM (SELECT TOP '+Convert(varchar,@PageSize*(@PageIndex-1)+1)+' '+@FieldName; set @sqlstr= @sqlstr+' From '+@TableName+' where 1=1 '; if (@sqlCondition <> '') begin set @sqlstr= @sqlstr+' and '+@sqlCondition; end set @sqlstr= @sqlstr+' ORDER BY '+ @FieldName+' '+@Sort+' ) as T) '; set @sqlstr= @sqlstr+ ' ORDER BY '+@FieldName+' '+@Sort; --print @sqlstr exec(@sqlstr)