无法在mysql中使用动态sql创建表

时间:2019-07-09 07:24:19

标签: mysql

这是我在MySQL中的代码。

USE database;
DROP procedure IF EXISTS CreateTable;
DELIMITER $$
USE ims_data$$
CREATE PROCEDURE CreateTable ()
    BEGIN
Set @SqlQuery = Concat('DROP TABLE IF EXISTS mytemptable;');
Set @SqlQuery = Concat(@SqlQuery,'\r\n','create table mytemptable');
Set @SqlQuery = Concat(@SqlQuery,'\r\n','(');
Set @SqlQuery = Concat(@SqlQuery,'\r\n','Column1 int,');
Set @SqlQuery = Concat(@SqlQuery,'\r\n','Column2 varchar(500)');
Set @SqlQuery = Concat(@SqlQuery,'\r\n',');');
Set @SqlQuery = Concat(@SqlQuery,'\r\n','Select * from mytemptable;');
#Select @SqlQuery;
PREPARE Statement From @SqlQuery;
EXECUTE Statement;  
DEALLOCATE PREPARE Statement;
END$$

DELIMITER ;


call GetUploadInformation();

我正在尝试创建表,但这给了我一个错误。

错误代码:1064。SQL语法错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在'create table mytemptable(Stockist_Code int,Status varchar(500))附近使用; Sele'在第2行

这是查询的输出。

    DROP TABLE IF EXISTS mytemptable;
create table mytemptable
(
Column1 int,
Column2 varchar(500)
);
Select * from mytemptable;

在不调用该过程的情况下执行此代码,哪个工作正常。

1 个答案:

答案 0 :(得分:2)

PREPARE / EXECUTE只能处理one statement at a time。您正在尝试使用;执行两个操作。

该错误消息为您提供了一条线索,因为它可以同时运行两个语句。

您必须将它们作为单独的语句运行。