如何通过具有自动递增列的存储过程将数据插入到表中

时间:2015-11-17 12:34:03

标签: php mysql stored-procedures

我有一个存储过程如下

DROP PROCEDURE IF EXISTS maintain//    
CREATE PROCEDURE maintain 
(    
    IN inMaintainType   CHAR(1),    -- 'i' = Insert, 'u'= Update/Edit, 'd'= Delete 
    IN inEntityId       INT,            -- 0 for Insert Case
    IN inEntityName     VARCHAR(100),
    IN inEntityDescription  VARCHAR(100),
    IN inEntityPrefix   CHAR(1),
    IN inStatus     CHAR(1),    -- 'a' = Active, 'i' = Not active
    IN inEmpId      INT,
    OUT outReturnStatus     INT,
    OUT outReturnRemarks    VARCHAR(100)
)

BEGIN    
    IF inMaintainType= 'i'
    THEN
        INSERT INTO Entity
        (
            EntityId,
            EntityName,
            EntityDescription,
            EntityPrefix,
            Status,
            CreatedBy,
            CreatedDate,
            ModifiedBy,
            ModifiedDate
        ) 
        VALUES
        (
            li_EntityId,
            inEntityName,
            inEntityDescription,
            inEntityPrefix,  
            'a',
            inEmpId,
            now(),
            inEmpId,
            now()
        );

        if row_count() != 0
            THEN SET outReturnStatus =0 ,
                outReturnRemarks = 'Insert Successful';
            ELSE SET outReturnStatus = 1,
                outReturnRemarks = 'Insert Not Successful';  
            END IF;                     
        END IF ;

我想调用过程来插入带变量的数据

mysql_query("CALL maintain('i','$EntityId','$EntityName','$EntityDescription','$EntityPrefix','$Status','$EmpId',@outvari1,@outvari2)")or die(mysql_error());

但是它向我显示了错误

  

未知栏' li_EntityId'在'字段列表'

EntityId是自动递增的字段。

1 个答案:

答案 0 :(得分:1)

将上述评论澄清为实际答案......

您已设置表格,以便字段EntityId将自动增加。

因此,当您在表格中插入记录时,您不需要为ID字段显式添加值 - 它会为您执行此操作。

因此,解决方案是从INSERT INTO ...语句中删除EntityId字段,并从插入的值中删除li_EntityId值,因此只有8个参数传递到剩余的8个字段中。