Sql 根据给定参数创建表的存储过程

Sql 根据给定参数创建表的存储过程,sql,mariadb,Sql,Mariadb,我正在使用MariaDB并尝试创建一个过程,该过程接受两个参数,表名t char(20)和主键p char(20),并从中创建一个表。然而,当我调用我的过程时,它会创建表t,而不是t所持有的值。我对SQL非常陌生,如果这很简单,我很抱歉 这是我的密码: Create Procedure createTable(IN t char(20), IN d char(20)) create table t(d char(20)) ; 您需要使用动态SQL: delimiter $$ C

我正在使用MariaDB并尝试创建一个过程,该过程接受两个参数,表名t char(20)和主键p char(20),并从中创建一个表。然而,当我调用我的过程时,它会创建表t,而不是t所持有的值。我对SQL非常陌生,如果这很简单,我很抱歉

这是我的密码:

Create Procedure createTable(IN t char(20), IN d char(20)) 
    create table t(d char(20))
;  

您需要使用动态SQL:

delimiter $$

Create Procedure createTable (
    IN in_t varchar(20),
    IN in_d varchar(20)
) 
begin
    set @sql = 'create table [t] ([d] char(20))';

    set @sql = replace(replace(@sql, '[d]', in_d), '[t]', in_t);

    prepare stmt from @sql;

    execute stmt;
end;

delimiter ;

顺便说一下,我永远不会让
id
成为字符串。自动递增id似乎更合理。

您需要使用动态SQL:

delimiter $$

Create Procedure createTable (
    IN in_t varchar(20),
    IN in_d varchar(20)
) 
begin
    set @sql = 'create table [t] ([d] char(20))';

    set @sql = replace(replace(@sql, '[d]', in_d), '[t]', in_t);

    prepare stmt from @sql;

    execute stmt;
end;

delimiter ;

顺便说一下,我永远不会让
id
成为字符串。自动递增id似乎更合理。

非常感谢,我将阅读一些有关动态SQL的文章!现在你这么说了,我明白为什么我应该有一个自动递增的id了,谢谢你的洞察力!您能告诉我为什么在变量前面加上uu?以区分函数参数和表中的列。另一种方法:使用
CONCAT()
而不是
REPLACE()
。非常感谢,我将阅读一些有关动态SQL的内容!现在你这么说了,我明白为什么我应该有一个自动递增的id了,谢谢你的洞察力!您能告诉我为什么在变量前面加上?以区分函数参数和表中的列。另一种方法:使用
CONCAT()
而不是
REPLACE()