2010-09-07 75 views
3

我想在sql查詢中更改表的動態名稱。比如我有一個存儲的過程:MySQL存儲過程動態更改表的名稱

CREATE PROCEDURE NewProc(IN tableName varchar(64),IN message text) 
BEGIN 
    INSERT INTO tableName VALUES (message); 
END; 

我需要改變表名在運行時,我能做到這一點或沒有? 謝謝。

+0

這是一個非常值得懷疑的數據模型,使多個表具有相同數據類型的消息列... – 2010-09-07 21:22:05

回答

0

您必須使用動態SQL才能將prepareexecute作爲SQL字符串來實現您所描述的內容。

在準備之前,動態表名(或列名或SQL關鍵字等)必須插入到SQL字符串中。您無法爲這些動態元素使用查詢參數。

將表名插入到SQL查詢中時,要小心避免SQL注入漏洞。例如,您應該通過查找information schema來檢查表名是否存在。

我同意來自@OMG Ponies的評論 - 這是一個code smell,您有多個相同結構的表格,這樣您就可以對完全相同的列執行完全相同的插入。代碼氣味並不能保證你的設計不好,但值得考慮。