我是新来的MySQL和我想的端口从SQL Server的一些存储过程。我创建了参数传递MySQL中的基本存储过程。
该存储的过程简单地需要一个参数,并执行基于所提供的参数a“如果存在降”。
当在MySQL运行结果在下面的错误。
似乎不知何故,参数传递“mytablename”到存储过程中的语句而不是一个参数的一部分被执行。
有什么建议?
SQL语句:
call mydb.spDroptableifexist('customerdata');
结果:
0 row(s) affected, 1 warning(s): 1051 Unknown table 'mydb.mytablename'
这是存储过程:
USE `mydb`;
DROP procedure IF EXISTS `spDroptableifexist`;
DELIMITER $$
USE `mydb`$$
CREATE DEFINER=`root`@`localhost` PROCEDURE `spDroptableifexist`(IN mytablename VARCHAR(255))
BEGIN
drop table if exists mytablename;
END$$
DELIMITER ;
从manual:
用户变量旨在提供数据值。它们不能直接在SQL语句中作为标识符或作为标识符,如环境的一部分,其中一个表或数据库名,预计使用
要使用一个变量作为表名,你需要准备一个语句并执行它:
SET @sql = CONCAT('DROP TABLE IF EXISTS ', mytablename);
PREPARE stmt FROM @sql;
EXECUTE stmt;