MySQL存储过程,插入$table

MySQL存储过程,插入$table,mysql,stored-procedures,set,sql-insert,concat,Mysql,Stored Procedures,Set,Sql Insert,Concat,我试图创建一个存储过程来首先创建一个表(如果它还不存在的话)。本部分功能与预期一致: BEGIN SET @sql = CONCAT('CREATE TABLE IF NOT EXISTS ',`@variable_table`,' LIKE table_template;'); PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; 创建表之后,或者如果表已经存在,我希望存储的pro

我试图创建一个存储过程来首先创建一个表(如果它还不存在的话)。本部分功能与预期一致:

    BEGIN
    SET @sql = CONCAT('CREATE TABLE IF NOT EXISTS ',`@variable_table`,' LIKE table_template;');
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
创建表之后,或者如果表已经存在,我希望存储的prosedure在其中转储一组数据

    SET @sql = CONCAT('INSERT INTO ',`@variable_table`,' (
    `col1`,`col2`,`col3`,`col4`,`col5`)
    VALUES (
    `@D1`,`@D2`,`@D3`,`@D4`,`@D5`);');

    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    END
如果我将“,
@variable\u table
”与现有的\u table\u名称交换,代码将按预期工作。
是否可以在此处使用变量运行代码?在这种情况下,我该如何运行?

在过去几个小时的反复尝试后,我发现了错误,代码现在正在运行:

BEGIN
SET @sql = CONCAT('CREATE TABLE IF NOT EXISTS ',`@variable_table`,' LIKE table_template;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET @sql = CONCAT('INSERT INTO ',`@variable_table`,' (`col1`,`col2`,`col3`,`col4`,`col5`)
VALUES ("',`@D1`,'","',`@D2`,'","',`@D3`,'","',`@D4`,'","',`@D5`,'");');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
在我看来,我的语法错误出现在代码的“”区域。
如您所见,我所做的唯一更改是将
@D1
变量置于“文本”之外,并在变量两侧的文本内添加了“变量”。

EXECUTE@stmt USING variables语句看起来更好一些:

BEGIN
SET @sql = CONCAT(
    'CREATE TABLE IF NOT EXISTS ',`@variable_table`,' LIKE table_template;'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET @sql = CONCAT(
    'INSERT INTO ',`@variable_table`,
    ' (`col1`,`col2`,`col3`,`col4`,`col5`) VALUES (?,?,?,?,?);'
);

PREPARE stmt FROM @sql;
EXECUTE stmt USING @D1, @D2, @D3, @D4, @D5;
DEALLOCATE PREPARE stmt;
END;

您忘了提及现有代码面临的问题。@stickybit很抱歉,它返回了一条语法错误消息,并要求我检查文档。请回答问题并将该消息作为文本包含,没有屏幕截图。是的,确实如此。谢谢!