MySQL存储过程不能直接使用limit加上变量的形式, 因为MySQL会把变量当成字段名。怎么办? 有条弯路可走,使用CONCAT 方法把字符串连接在一起, 然后 EXECUTE, 得到结果集。
DELIMITER $$
DROP PROCEDURE IF EXISTS `test_p1`$$
CREATE PROCEDURE `test_p1`(IN param INT)
BEGIN
/* 获得10条记录 */
SET @sql = CONCAT('SELECT * FROM table_a LIMIT ', param, ' 10 ' );
PREPARE sqlstmt FROM @sql;
EXECUTE sqlstmt;
DEALLOCATE PREPARE sqlstmt;
END$$
DELIMITER ;
其实可以再加上一些判断,使得同一个存储过程在不同参数下查询不同的表,或者匹配不同的条件。 这样做也方便前台的开发者理解、调用, 不用去记N多的存错过程名称,只要改个参数即可。

跟我一起留言的
跟我一起留言
不错 `支持
嗯,这该死的limit,害得我要将本来一个语句搞定的换成好几段字符串拼接。