如何将连续列值插入循环内的表中

时间:2017-11-23 20:58:50

标签: mysql

我有5列名称 - value1,value2 ... value5

我有一个迭代5次的while循环并且在每次迭代中我试图在每个列中插入一个值,即5个插入到5个不同的行中。因此,在每个插入中,我只插入1列,其他插入默认为NULL。

我做过这样的事情,但是没有用。我收到错误:错误代码:1054。'字段列表'中的未知列'insert_value'

set loop_counter = 1;
set loop_limit = 5;

while loop_counter < loop_limit do
     set insert_value = concat('value', loop_counter);    
     insert into values_table (insert_value) values (insert_value);
end while;

所有这些代码都在一个传递5个参数的函数中 - value1..value5。

因此,在insert语句中,我正在尝试生成列名,还需要指定需要插入的值。

我意识到插入是错误的,但我不知道该怎么做。

有关如何执行此操作的任何建议吗?

1 个答案:

答案 0 :(得分:0)

您的代码无效的原因是您不能只使用concat()填充column_name。为了完成您的任务,您需要Prepared Statements

以下查询将完成工作:

CREATE PROCEDURE ins()
BEGIN
    DECLARE i int DEFAULT 1;        
    WHILE i <= 5 DO
    set @q := (select concat("Insert into t(",concat('value', i),") values('",concat('value', i),"')"));
        prepare s1 from @q;
        execute s1;
        deallocate prepare s1;                     
        SET i = i + 1;
    END WHILE;
END;

CALL ins();

SELECT *FROM t;

结果:

   value1   value2  value3  value4  value5
------------------------------------------------
    value1  NULL    NULL    NULL    NULL
    NULL    value2  NULL    NULL    NULL
    NULL    NULL    value3  NULL    NULL
    NULL    NULL    NULL    value4  NULL
    NULL    NULL    NULL    NULL    value5

Click here for WORKING DEMO

希望它有所帮助!