【问题标题】:MySql Procedure values for insert as a variableMySql 过程值作为变量插入
【发布时间】:2013-11-15 20:06:15
【问题描述】:

我在使用 MySql 过程时遇到了一些问题。 我有:

DROP TABLE IF EXISTS `employees2`;
CREATE TABLE `employees2` (
  `LastName` varchar(20) character set utf8 collate utf8_unicode_ci NOT NULL default '',
  `FirstName` varchar(10) character set utf8 collate utf8_unicode_ci NOT NULL default ''
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

它工作正常。

和MySQL程序:

DROP PROCEDURE IF EXISTS gen;

DELIMITER $$
CREATE PROCEDURE gen()
    BEGIN
        DECLARE e1 TEXT;
        DECLARE e2 TEXT;
        DECLARE e3 TEXT;
        SET e1 = "Davolio";
        SET e2 = "Nancy";
        SET e3 = "Ron , Deplin";
        insert  into `employees2`(`LastName`,`FirstName`) values ('Nonew','adams');
        insert  into `employees2`(`LastName`,`FirstName`) values (e1,e2);
        insert  into `employees2`(`LastName`,`FirstName`) values (e3);

    END $$
DELIMITER ;

call gen();

我想将变量 e3 中的值插入到表中。 “Ron”用于列 LastName,“Deplin”用于列 FirstName。但我收到错误:“错误代码:1136。列数与第 1 行的值计数不匹配”第一次和第二次插入工作正常。如何强制第三次插入工作?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您只指定了一个值,其中包含在上次插入中命名的两列,因此行数不相等。

    请参阅这篇文章,了解如何使用 MySQL 来拆分具有两个值条目的字符串: https://stackoverflow.com/a/9953163/2812842

    【讨论】:

    • 是的。但我有: SET e3 = "Ron , Deplin"; Ron 代表 LastName 列,Deplin 代表 FirstNamecolumn。我只想在插入查询的 () 之间粘贴这个 e3。
    • 好的。 insert into employees2(LastName,FirstName) values (SUBSTRING_INDEX(e3, ',',1),SUBSTRING_INDEX(e3, ',',-1)); 这是可行的,但这不是我想要的。当我有更长的值列表时,此方法将无用。
    • 你需要这样拆分字符串吗?您拥有的数据越多,您应该越多地使用单独的字段或结构化数据...
    • 好的。但是如果:插入employees2(LastName,FirstName,City,Country) 值 (e1,e2);我的 e1 = "Ron , Deplin" 和 e2 = "NY, USA" 我尝试在很多方面更改 e3,但没有通过。例如: e3 = "'Ron' , 'Deplin'" 等@scrowler - 也许我不清楚。你明白我想做什么了吗?
    猜你喜欢
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多