CREATE PROCEDURE Pagination_d
(
@tab nvarchar(30),---表名
@strFld nvarchar(500), --字段字符串
@strWhere nvarchar(500), --where条件
@Page int, --页码
@RecsPerPage int, --每页容纳的记录数
@ID VARCHAR(255), --需要排序的不重复的ID号
@Sort VARCHAR(255), --排序字段及规则
@isGetCount bit--是否得到记录总数
)
AS
DECLARE @Str nVARCHAR(4000)
declare @SQL nVARCHAR(4000) --不带排序语句的SQL语句
set @SQL='select ' + @strFld + ' from '+ @tab +' where ' +@strWhere
if(@isGetCount=0)
begin
SET @Str='SELECT TOP '+CAST(@RecsPerPage AS VARCHAR(20))+' * FROM
('+@SQL+') bb WHERE bb.'+@ID+' NOT IN (SELECT TOP '+CAST((@RecsPerPage*(@Page-1))
--cast内为要提取数据的前N页的数据量
AS VARCHAR(20))+' '+@ID+' FROM ('+@SQL+') aa ORDER BY '+@Sort+') ORDER BY '+@Sort
PRINT @Str
end
else
begin
SET @Str='select count('+@ID+') from '+ @tab + ' where ' +@strWhere
PRINT @Str
end
EXEC sp_ExecuteSql @Str --重点,用于执行动态生成的SQL语句(通过存储过程生成的动态SQL语句),一定要写在存储过程完成的后面!
GO