2011-04-14 63 views
0

我需要有一個表中增加一定的ID(如AUTO_INCREMENT)函數使用MySQL函數變量作爲表名查詢

我有水木清華這樣

 
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這實際上是一個傳遞給函數的變量,而不是一個確切的表名?如果可能。

回答

2

你需要像

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