已下是我写的例子:
ALTER PROCEDURE [dbo].[GetPageList]
@TableName varchar(8000), --表名,可使用连接表如 Table1 t1 left join Table2 t2 on t2.Id = t1.typeId
@FiledName varchar(8000), --需要的字段名,全部字段可用 *
@PageSize varchar(10), --每页记录数
@PageIndex varchar(10), --当前页码
@Where varchar(8000), --查询条件,需要带where 如: where 1=1
@Order varchar(500), --排序,如 ID desc,Name asc,必须指定一个排序
@rowCount int output --返回总共行数
AS
declare @sql nvarchar(max)
set @sql = N'
with PageList as
(select
ROW_NUMBER() OVER (order by ' + @Order + ') as PageListID,
' + @FiledName + '
from ' + @TableName + '
' + @Where + ')
SELECT top ' + @PageSize + ' * FROM PageList WHERE PageListID >= (' + @PageIndex + '-1) * ' + @PageSize + ' +1 '
execute(@sql)
set @sql = 'select COUNT(0) as [rowCount] from ' + @TableName + ' ' + @Where
print @sql
execute sp_executesql @sql,N'@PCount int output',@rowCount output