Sql 根据给定参数创建表的存储过程
我正在使用MariaDB并尝试创建一个过程,该过程接受两个参数,表名t char(20)和主键p char(20),并从中创建一个表。然而,当我调用我的过程时,它会创建表t,而不是t所持有的值。我对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
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()
。