我想从我的程序中动态创建表,其中包含我通过程序给出的列名和表名。所以我想将我的变量传递给存储过程但是我喜欢这个错误发生
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'.
答案 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');