Mysql 存储过程返回ER\u BAD\u NULL\u错误

Mysql 存储过程返回ER\u BAD\u NULL\u错误,mysql,stored-procedures,Mysql,Stored Procedures,在MySql 5.7上,我想运行这个过程,从article表中获取文章的tag1并将它们插入article_标记表中: 但是,当我运行该过程时,我得到: 错误1048 23000:列“tag”不能为null 这是一个可复制的例子 这个问题困扰了我好几个小时。因此,请欣赏关于为什么会发生这种情况以及如何解决它的提示。这是一个空集tag1=从id=x的文章中选择tag1@AlbertoMoro为什么为空?不要给声明的变量与列同名-在整个代码中将声明的变量tag1更改为vtag1,它应该可以工作。这不

在MySql 5.7上,我想运行这个过程,从article表中获取文章的tag1并将它们插入article_标记表中:

但是,当我运行该过程时,我得到:

错误1048 23000:列“tag”不能为null

这是一个可复制的例子


这个问题困扰了我好几个小时。因此,请欣赏关于为什么会发生这种情况以及如何解决它的提示。

这是一个空集tag1=从id=x的文章中选择tag1@AlbertoMoro为什么为空?不要给声明的变量与列同名-在整个代码中将声明的变量tag1更改为vtag1,它应该可以工作。这不是一个把戏,mysql根本无法区分具有相同名称的列、变量和参数。由编码人员提供信息。插入。。。关于重复密钥更新
DELIMITER $$
CREATE PROCEDURE dt1()
BEGIN
DECLARE maxid INT;
DECLARE x INT;
 DECLARE tag1 VARCHAR(30);
DECLARE ntag1 int;
SET maxid = (SELECT MAX(id) FROM `article`);
SET x = (SELECT MIN(id) FROM ` article`) ;
    WHILE x<= maxid DO 
       SET tag1 = (SELECT tag1 from `article` WHERE id=x);   
       call debug_msg(TRUE, tag1);
       SET ntag1 = (SELECT count(*) from `article_tag` WHERE tag=tag1);

       IF ntag1 = 0 THEN INSERT INTO `article_tag` (tag, slug, frequency) VALUES (tag1, tag1, 1);
       ELSE UPDATE ` article_tag` SET frequency = frequency + 1 WHERE tag=tag1 ;
       END IF;
              SET  x = x + 1; 
  END WHILE;
END$$
    SELECT count(*) from `article` WHERE tag1 IS NULL;
    +----------+
    | count(*) |
    +----------+
    |        0 |
    +----------+