【问题标题】:how to insert multiple comma separated values into multiple columns如何将多个逗号分隔值插入多列
【发布时间】:2021-05-29 00:53:39
【问题描述】:

我需要一个存储过程来插入逗号分隔值,如下所示

contact_id = '1000, 1002, 1003, 1004';

first_name = 'dirt,dammy , samii ,samii ,xenon ';

使用存储过程

...

我试过了

BEGIN


 drop temporary table if exists t_srcids;
        create temporary table t_srcids(srcid char(255), names char(255));
        set @vIds = testSourceId;
        set @vNames = testSourceName;

       

       
       
        set @value = replace(@vNames,",","'),(");

        set @sql = concat("insert into t_srcids (srcid) values ('", replace(@vIds,",", "'),('"),"');");
        prepare stmt1 from @sql;
        execute stmt1;

        set @sql1 = concat("insert into t_srcids (names) values ('", replace(@vNames,",", "'),('"),"');");
        prepare stmt2 from @sql1;
        execute stmt2;

        select * from t_srcids;


END;

产生单个插入的也需要其他列的帮助

【问题讨论】:

  • 为什么你需要一个非严格程序的程序?
  • 抱歉,我什么都不懂
  • 比不使用程序性能更好?我不相信那是真的,也不相信你有资格做出这样的评估——但不管你的船是什么。
  • 我刚刚做了更改有没有办法从最小 id 开始插入

标签: mysql stored-procedures replace concatenation


【解决方案1】:

drop temporary table if exists t_srcids;
        create temporary table t_srcids(Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,srcid char(255));
        set @vIds = testSourceId;
        set @vNames = testSourceName;

        set @sql = concat("insert into t_srcids (srcid) values ('", replace(@vIds,",", "'),('"),"');");
        prepare stmt1 from @sql;
        execute stmt1;

        drop temporary table if exists temp_names;
        create temporary table temp_names(Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, names char(255));

        set @vNames = testSourceName;

        set @sql2 = concat("insert into temp_names (names) values ('", replace(@vNames,",", "'),('"),"');");
        prepare stmt2 from @sql2;
        execute stmt2;

        select tId.srcid,tNames.names from t_srcids tId join temp_names tNames on  tId.Id = tNames.Id;


我没有尝试同时在同一个表中插入,而是使用了不同的表并使用上面的连接选择它们。

这可以通过 loop 或 while 来完成,但这不是一个优化的解决方案。所以我推荐这个解决方案用于作为参数传递的逗号分隔值以避免循环,谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-14
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多