CREATE PROCEDURE [dbo].[SelectPage]
    @QueryString varchar(8000), --查询语句

    @QueryString2 varchar(8000), --查询语句


    @FieldOrder nvarchar (1000), /*排序字段列表
    注意：因为数据物理存储顺序的不同，如果排序字段存在重复值可能会导致返回的指定分页记录集无效，此时需要附加一唯一值字段排序辅助完成排序功能。
    例如：在一图书表中存在id(图书编号)和name(图书名称)两个字段，其中id字段是唯一值，name字段存在重复值，
    如果从按照name进行排序的记录集中读取数据则应考虑使用“ORDER BY [name] asc, [id] asc”这样的排序字段列表，
    其中“[id] asc”用来辅助“[name] asc”完成排序，对于按照name排序的结果中出现name值相同的多条记录按照id进行排序
    */
    @KeyFieldName nvarchar (250), --主键列、标识列或具有唯一值的列名称
    @PageIndex int, --指定分页索引，从0开始的整数，0表示第一页
    @PageSize int, --每页的大小(每页最多显示的记录数)

@countx int output

as
SET @KeyFieldName=N' '+@KeyFieldName

SET @FieldOrder=N' '+ISNULL(@FieldOrder, '')





declare @sql varchar(8000)



declare @sql2 varchar(8000)





declare @TempFieldName nvarchar(50)--临时字段名
set @TempFieldName=N' [ID_'+cast(newid() as varchar(40))+N']'



declare @sqlstr varchar(8000) 






set @sql=N'declare @tb1 table('+@TempFieldName+N' int IDENTITY(1,1),'+@KeyFieldName+N')


 INSERT INTO @tb1 SELECT   id,px,company from '

	
declare @Id1 varchar(20),@Id2 varchar(20) --开始和结束的记录号 
set  @Id1=cast(@PageSize*(@PageIndex-1) as varchar(20)) 
set  @Id2=cast(@PageSize*@PageIndex-1 as varchar(20)) 



--set @sql2=N'
--select picurl,company,con,url,asss.id,dt,aax.px as pxx from greentb asss inner join (select TOP '+cast(@PageSize AS VARCHAR(20))+'T. id,T.px FROM @tb1 T where T.id NOT IN 
--(select TOP '+cast((@PageSize*(@PageIndex-1)) AS VARCHAR(20))+' T9. id  FROM @tb1 T9 order by px desc,'+@FieldOrder+' )  order by px desc,'+@FieldOrder+' ) aax on aax.[id]=asss.[id]  order by pxx desc, '+@FieldOrder


set @sql2=N'
select picurl,axx.company,con,url,asss.id,dt,axx.px as pxx,about_keys  from greentb asss inner join @tb1 axx   on axx.id=asss.id and axx.'+@TempFieldName +N'  between  '+@Id1+N' and  '+@Id2+' order by axx.'+@TempFieldName+ ' asc'


EXEC ( @sql+N'('+@QueryString+@QueryString2+N') a '+@sql2)



--set @countx=@@ROWCOUNT
GO
