ALTERPROCEDURE[dbo].[Pg_Paging] @Tablesvarchar(1000), --表名,多红表是请使用 tA a inner join tB b On a.AID = b.AID @PKvarchar(100), --主键,可以带表头 a.AID @Sortvarchar(200) ='', --排序字段 @PageNumberint=1, --开始页码 @PageSizeint=10, --页大小 @Fieldsvarchar(1000) ='*',--读取字段 @Filtervarchar(1000) =NULL,--Where条件 @Groupvarchar(1000) =NULL, --分组 @isCountbit=0--1 --是否获得总记录数 AS -- --select * from GL_NEWS order by GN_UPDATE_DATE DESC --exec Pg_Paging @Tables = 'tb_NewsInfo', @PK = 'News_ID', @Sort = 'News_ID DESC', @PageNumber = 2, @PageSize = 15,@Fields = '*', @Group = '', @isCount = 0 DECLARE@strFiltervarchar(2000) declare@sqlvarchar(8000) IF@FilterISNOTNULLAND@Filter!='' BEGIN SET@strFilter=' WHERE '+@Filter+'' END ELSE BEGIN SET@strFilter='' END if@isCount=1--只获得记录条数 begin set@sql='SELECT Count(*) FROM '+@Tables+@strFilter end else begin if@Sort='' set@Sort=@PK+' DESC ' IF@PageNumber<1 SET@PageNumber=1 if@PageNumber=1--第一页提高性能 begin set@sql='select top '+str(@PageSize) +''+@Fields+' from '+@Tables+''+@strFilter+' ORDER BY '+@Sort end else begin /**//**//**//*Execute dynamic query*/ DECLARE@START_IDvarchar(50) DECLARE@END_IDvarchar(50) SET@START_ID=convert(varchar(50),(@PageNumber-1) *@PageSize+1) SET@END_ID=convert(varchar(50),@PageNumber*@PageSize) set@sql=' SELECT '+@Fields+' FROM (SELECT ROW_NUMBER() OVER(ORDER BY '+@Sort+') AS rownum, '+@Fields+' FROM '+@Tables+') AS D WHERE rownum BETWEEN '+@START_ID+' AND '+@END_ID+' ORDER BY '+@Sort END END --print @sql EXEC(@sql)