我需要一个增加表中某个ID的函数(比如auto_increment)
我喜欢这样的
DELIMITER $$ DROP FUNCTION IF EXISTS `GetNextID`$$ CREATE FUNCTION `GetNextID`(tblName TEXT, increment INT) RETURNS INT DETERMINISTIC BEGIN DECLARE NextID INT; SELECT MAX(concat(tblName, 'ID')) + increment INTO NextID FROM concat('table_', tblName); ## SELECT MAX(articleID) + increment INTO NextID FROM table_article; RETURN NextID; END$$ DELIMITER ; INSERT INTO `table_article` ( articleID, articleAlias ) VALUES ( GetNextID('article', 5), 'TEST' );
所以我传递了两个变量:tblName(没有table_
前缀)和增量号。注释行 - 函数本身内部的SELECT查询 - 运行良好,但我想动态地将表名传递给函数,从而从某个表的某个列中获取数据。我做错了什么?
错误是:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('table_', tblName); RETURN NextID; END' at line 6
如果我只是尝试以这种方式选择最大值
SELECT MAX(articleID) + increment INTO NextID FROM tblName;
错误报告 tblName 不存在。我怎么能告诉MySql这实际上是一个传递给函数的var,而不是一个确切的表名?如果可能的话。
答案 0 :(得分:2)
你需要像
这样的东西prepare stmp from concat('SELECT MAX(ID) + ', increment, ' INTO NextID FROM table_', tblName);
execute stmp;
deallocate prepare stmp;