在查询中使用MySql函数变量作为表名

时间:2011-04-14 12:41:51

标签: mysql function variables

我需要一个增加表中某个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,而不是一个确切的表名?如果可能的话。

1 个答案:

答案 0 :(得分:2)

你需要像

这样的东西
prepare stmp from concat('SELECT MAX(ID) + ', increment, ' INTO NextID FROM table_', tblName); 
execute stmp; 
deallocate prepare stmp;