2010-08-06 66 views
5

我正在嘗試使用以下存儲過程。我在這個MySQL存儲過程中做了什麼錯誤?

DELIMITER $$ 

CREATE DEFINER=`root`@`localhost` 
PROCEDURE `DeleteField`(IN _TABLENAME Text, IN _FIELDNAME text) 
BEGIN 
    if exists (select * from information_schema.Columns 
    where table_name = _TABLENAME and column_name = _FIELDNAME) 
    then 
    alter table _TABLENAME drop column _FIELDNAME; 
    end if; 
END 

因此,我調用(「anytable」,「Anyfield」),我得到的錯誤 錯誤代碼:1146Table'Database._tablename'doesn't存在 這_tablename應該是我的參數,而不是字符串。

在我掛上自己之前,我有些幫助,我太愛我的生活了。

+1

聖彼得:「你是怎麼死的? Skychaser:「MySQL查詢......」聖彼得:「你的是什麼?」 – JYelton 2010-08-06 23:41:06

回答

5

我希望您需要創建一個動態SQL查詢來完成此操作。

如何做到這一點的一個例子是:

http://www.java2s.com/Code/SQL/Procedure-Function/Createadynamicstatementinaprocedure.htm

這將是ALTER TABLE更換,雖然我已經測試了這一點。

DECLARE l_sql VARCHAR(4000); 
    SET l_sql=CONCAT_ws(' ', 
       'ALTER table ',_TABLENAME,' drop column ',_FIELDNAME); 
    SET @sql=l_sql; 
    PREPARE s1 FROM @sql; 
    EXECUTE s1; 
    DEALLOCATE PREPARE s1; 
+1

+1:絕對正確。 – 2010-08-07 01:07:36

+0

謝謝詹姆斯,你救了我的生命,我覺得我欠你一半的餅乾什麼的。真的,非常感謝你。 我仍然不知道爲什麼我必須使用動態過程,但我可以稍後保存這種理解,但任何鏈接都會非常感激。 :) – Skychaser 2010-08-08 11:58:34

相關問題