alter
procedure
prGetPage
(
@FName
varchar(1000),--字段名
@TName
varchar(100),--表名
@pageSize
int,
--每页显示多少条记录
@pageIndex
int,--当前页面索引
@sortColumn
varchar(100)--排序列
)
as
set
nocount
on
declare
@strSql
varchar(2000)
set
@strSql='select
top
'+cast(@pageSize
as
varchar(4))+'
'+@FName+'
from
'+@TName+'
where
'+@sortColumn+'>=(select
max('+@sortColumn+')'+
'
from
(select
top
'+cast((@pageIndex-1)*@pageSize+1
as
varchar(4))+'
'+@FName+'
from
'+@TName+'
order
by
'+@sortColumn+')
as
b)order
by
'+@sortColumn
execute
(@strSql)
$TableName VARCHAR(200),/*表名*/$FieldList VARCHAR(2000), /*显示列名*/
$PrimaryKey VARCHAR(100), /*单一主键或唯一值键*/
$WhereStr VARCHAR(1000), /*查询条件 不含'where'字符*/
$OrderStr VARCHAR(1000), /*排序 不含'order by'字符,如id asc,userid desc,当@SortType=3时生效*/
$SortType INT, /*排序规则 1:正序asc 2:倒序desc 3:多列排序*/
$RecorderCount INT, /*记录总数 0:会返回总记录*/
$PageSize INT, /*每页输出的记录数*/
$PageIndex INT, /*当前页数*/
存储过程:create Procedure pname( @pageIndex int,@pageSize)
as
select * from tableName order by id
offset @pageIndex * pageSize fetch next pageSize rows only
分页:
sqlserver 在2008之前 使用 top 和 not int top 的方式来做分页
2008以后使用 row_number() 函数作为分页关键函数
2012使用 offset 1 fetch next 10 rows only
你问了2个问题,你可以优先把视图,存储过程,触发器等弄明白,分页是查询,在存储过程里可以写复杂的sql文,只是在运行时是预编译和参数化查询防止sql注入
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)