前段时间没有给出SQLServer转到Mysql的通用存储过程,本着共享的精神,为大家奉献这段Mysql分页查询通用存储过程,假设所用数据库为guestbook:
use
guestbook;
delimiter $$
drop
procedure
if
exists
prc_page_result $$
create
procedure
prc_page_result (
in
currpage
int
,
in
columns
varchar
(
500
),
in
tablename
varchar
(
500
),
in
sCondition
varchar
(
500
),
in
order_field
varchar
(
100
),
in
asc_field
int
,
in
primary_field
varchar
(
100
),
in
pagesize
int
)
begin
declare
sTemp
varchar
(
1000
);
declare
sSql
varchar
(
4000
);
declare
sOrder
varchar
(
1000
);
if
asc_field
=
1
then
set
sOrder
=
concat(
'
order by
'
, order_field,
'
desc
'
);
set
sTemp
=
'
<(select min
'
;
else
set
sOrder
=
concat(
'
order by
'
, order_field,
'
asc
'
);
set
sTemp
=
'
>(select max
'
;
end
if
;
if
currpage
=
1
then
if
sCondition
<>
''
then
set
sSql
=
concat(
'
select
'
, columns,
'
from
'
, tablename,
'
where
'
);
set
sSql
=
concat(sSql, sCondition, sOrder,
'
limit ?
'
);
else
set
sSql
=
concat(
'
select
'
, columns,
'
from
'
, tablename, sOrder,
'
limit ?
'
);
end
if
;
else
if
sCondition
<>
''
then
set
sSql
=
concat(
'
select
'
, columns,
'
from
'
, tablename);
set
sSql
=
concat(sSql,
'
where
'
, sCondition,
'
and
'
, primary_field, sTemp);
set
sSql
=
concat(sSql,
'
(
'
, primary_field,
'
)
'
,
'
from (select
'
);
set
sSql
=
concat(sSql,
'
'
, primary_field,
'
from
'
, tablename, sOrder);
set
sSql
=
concat(sSql,
'
limit
'
, (currpage
-
1
)
*
pagesize,
'
) as tabtemp)
'
, sOrder);
set
sSql
=
concat(sSql,
'
limit ?
'
);
else
set
sSql
=
concat(
'
select
'
, columns,
'
from
'
, tablename);
set
sSql
=
concat(sSql,
'
where
'
, primary_field, sTemp);
set
sSql
=
concat(sSql,
'
(
'
, primary_field,
'
)
'
,
'
from (select
'
);
set
sSql
=
concat(sSql,
'
'
, primary_field,
'
from
'
, tablename, sOrder);
set
sSql
=
concat(sSql,
'
limit
'
, (currpage
-
1
)
*
pagesize,
'
) as tabtemp)
'
, sOrder);
set
sSql
=
concat(sSql,
'
limit ?
'
);
end
if
;
end
if
;
set
@iPageSize
=
pagesize;
set
@sQuery
=
sSql;
prepare
stmt
from
@sQuery
;
execute
stmt using
@iPageSize
;
end
;
$$
delimiter;
可以存储为数据库脚本,然后用命令导入:
mysql -u root -p < pageResult.sql;
调用:call prc_page_result(1, "*", "Tablename", "", "columnname", 1, "PKID", 25);
PS:若要转载,请注明作者与出处。