我正在尝试使用以下存储过程。
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') 并得到错误 错误代码:1146表'Database._tablename'不存在 这个 _tablename 应该是我的参数,而不是字符串。
在我上吊之前请帮忙,我太爱我的生活了。
最佳答案
我希望您需要创建一个动态 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;
关于sql - 我在这个 MySQL 存储过程中做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3428501/