首页 > 解决方案 > MYSQL - 错误 1048 (23000): 列不能为空

问题描述

我有一个表,我创建了一个 SP 来将数据插入其中。

当我运行 SP 时,我得到主题中的错误,如果我使用相同的数据运行手动插入,这将按预期工作。

手动插入工作

INSERT INTO Leagues (LeagueName, PlatformID, GameID, ActiveStatus, Admin, PointsSys)
    VALUES ('LeagueName', 1, 1, 'Active', 'Test', 1); 

调用 SP 不 - 返回错误 'ERROR 1048 (23000): Column \'LeagueName\' cannot be null'

CALL `tmddg-data`.`SP_CreateLeague`('LeagueName', 1, 1, 'Active', 'Test', 1)

创建表

CREATE TABLE `Leagues` (
  `LeagueID` int(11) NOT NULL AUTO_INCREMENT,
  `LeagueName` text NOT NULL,
  `PlatformID` int(11) NOT NULL,
  `GameID` int(11) NOT NULL,
  `ActiveStatus` text NOT NULL,
  `Admin` varchar(45) NOT NULL,
  `PointsSys` int(11) DEFAULT '1',
  PRIMARY KEY (`LeagueID`),
  UNIQUE KEY `LeagueID_UNIQUE` (`LeagueID`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

创建 SP

DELIMITER $$
CREATE PROCEDURE `SP_CreateLeague`(
LN TEXT,
PID INT, 
GID INT, 
ASt TEXT, 
ADM VARCHAR(45), 
PS INT)
BEGIN
    DECLARE exit handler for SQLEXCEPTION
    BEGIN
        GET DIAGNOSTICS CONDITION 1 @sqlstate = RETURNED_SQLSTATE, 
        @errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
        SET @full_error = CONCAT("ERROR ", @errno, " (", @sqlstate, "): ", @text);
        SELECT @full_error;
    END;

    INSERT INTO Leagues (LeagueName, PlatformID, GameID, ActiveStatus, Admin, PointsSys)
    VALUES ( @LN, @PID, @GID, @ASt, @ADM, @PS);
END$$
DELIMITER ;

标签: mysql

解决方案


删除子句@中的 s 。VALUES

...
INSERT INTO ...
            VALUES (LN,
                    PID,
                    GID,
                    ASt,
                    ADM,
                    PS);
...

推荐阅读