多参数(条件)的分页存储过程 或 sql 语句

多参数(条件)的分页存储过程 或 sql 语句,第1张

--自己写个简单的存储过程

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注入


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/6258575.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-19
下一篇 2023-03-19

发表评论

登录后才能评论

评论列表(0条)

保存