在MySQL中,是否可以将列命名为变量的值?

时间:2014-06-04 15:03:22

标签: mysql sql variables

我一直在使用循环准备一个过程,根据变量的值创建新列。无论何时运行该过程,它都会创建一个名为" cntr,"的列。而不是cntr的值。这是代码:

BEGIN
Declare cntr INT Default 0; 
looper: LOOP
set cntr = cntr + 1;
if cntr = 334 THEN
    leave looper;
    end if;
alter table hour_time_stamp
    add column cntr int;
insert into hour_time_stamp (cntr)
        select truncate(time_stamp/3600000000000,0) from `events`
        where unit_id=cntr
        order by time_stamp DESC;
END loop looper;
END

有人知道如何将列命名为变量的值吗?

2 个答案:

答案 0 :(得分:0)

您需要执行动态sql。构造一个包含所需命令的字符串加上cntr的值,然后在其上调用execute。例如:

execute 'alter table hour_time_stamp
    add column ' + cntr + ' int';

要插入列,您必须以类似方式构造insert语句。

出于调试目的,可能有助于将两个sql字符串保存到varchar变量中并将其打印出来以确保它们保存cntr值。

答案 1 :(得分:0)

结合使用setconcatprepareexecute,可以使用变量替换列名称:

set @myvar ='MyColumn';
set @s = CONCAT("SELECT 'test' ", @myvar);
prepare stmt from @s;
execute stmt;