MySQL存储过程参数不起作用

时间:2019-02-05 04:53:50

标签: c# mysql stored-procedures parameters

我是MySQL的新手,我正在尝试从SQL Server移植一些存储过程。我创建了一个基本的存储过程,并在MySQL中传递了参数。

存储过程只需要一个参数,并根据提供的参数执行“如果存在则丢弃”。

在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 ;

1 个答案:

答案 0 :(得分:1)

来自manual

  

用户变量旨在提供数据值。他们不能是   直接在SQL语句中用作标识符或作为   标识符,例如在表或数据库名称为   预期的

要将变量用作表名,您需要准备一条语句并执行它:

SET @sql = CONCAT('DROP TABLE IF EXISTS ', mytablename);
PREPARE stmt FROM @sql;
EXECUTE stmt;