有没有办法在数据库中创建表时传递变量?

时间:2011-03-11 03:37:49

标签: 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 '@name'.

2 个答案:

答案 0 :(得分:0)

你运气不好MySQL stored procedures can not contain dynamic SQL,并且不能使用变量实现如何使用它。

因为您知道调用代码中的所有列信息,是否有特定原因您不能直接从代码中发出CREATE TABLE?这将是完成这项工作的最直接的方法。 (请注意,根据需要出现非临时表格可能是一个糟糕的坏主意......)

答案 1 :(得分:0)

这是一个开始 - 这会创建一个包含一个字段的表,因此您应该可以完成它:

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');