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”不是可识别的内置函数名。