Mysql 在数据库中创建表时,是否有方法传递变量?

Mysql 在数据库中创建表时,是否有方法传递变量?,mysql,stored-procedures,Mysql,Stored Procedures,我想从我的程序中动态创建表,其中列名和表名由我通过我的程序指定。因此,我想将变量传递给存储过程,但这样做会出现错误 create procedure maketable @name varchar(50), @roll int as begin create table new (@name, @roll) end 错误如下 Msg 102, Level 15, State 1, Procedure maketable, Line 7 Incorrect syntax near '@nam

我想从我的程序中动态创建表,其中列名和表名由我通过我的程序指定。因此,我想将变量传递给存储过程,但这样做会出现错误

create procedure maketable
@name varchar(50),
@roll int
as 
begin
create table new  (@name, @roll)
end
错误如下

Msg 102, Level 15, State 1, Procedure maketable, Line 7
Incorrect syntax near '@name'.
您运气不好,并且变量实现无法用于您试图使用它的方式


因为您知道调用代码中的所有列信息,所以有没有特定的原因不能直接从代码中发出CREATE TABLE?这将是完成这项工作最直接的方法。请注意,按需创建非临时表可能是一个非常糟糕的主意…

这是一个开始-这将创建一个带有一个字段的表,因此您应该能够完成它:

DROP PROCEDURE IF EXISTS maketable;

delimiter //

CREATE PROCEDURE maketable (IN table_name varchar(50), IN field1Name varchar(50), IN field1Type varchar(50))
BEGIN
   SET @s = CONCAT('CREATE TABLE ', table_name, '(', field1Name, ' ', field1Type, ')');
   PREPARE stmt1 FROM @s;
   EXECUTE stmt1;
END//
delimiter ;

CALL maketable('tst', 'id', 'INT');

而且“CONCAT”不是公认的内置函数名。您运行的是哪个版本的MySQL?当我在5.1Msg 156,15级,状态1,过程maketable,第1行关键字“IN”附近的错误语法上测试它时,它工作了。Msg 195,级别15,状态10,过程生成表,第3行“CONCAT”不是可识别的内置函数名。