我定义了以下存储过程来添加/更新名为ImportedProduct的表。

如果提供的主键ImportedProductId大于零,则更新现有记录,否则插入一个新键:

DELIMITER //

CREATE PROCEDURE AddOrUpdateImportedProduct (
    IN ImportedProductId BIGINT,
    IN UniqueThirdPartyCode VARCHAR(64),
    IN BranchId BIGINT
)
BEGIN
    IF ImportedProductId <= 0 THEN
        INSERT INTO ImportedProduct(UniqueThirdPartyCode, BranchId)
        VALUES(UniqueThirdPartyCode, BranchId);
    ELSE
        UPDATE
            ImportedProduct
        SET
            UniqueThirdPartyCode = UniqueThirdPartyCode,
            BranchId = BranchId
        WHERE
            ImportedProductId = ImportedProductId;
    END IF;
END //

DELIMITER ;


现在,我运行以下代码来更新现有行:

CALL AddOrUpdateImportedProduct (1, 'y-105', 24);


我可以看到表中存在带有ImportedProductId = 1的记录,但是出现以下错误:


  您正在使用安全更新模式,并且尝试更新表时没有
  使用KEY列禁用安全模式的位置

最佳答案

我很确定ImportedProductId = ImportedProductId始终存在。也许重命名变量或为更新的表添加别名。

07-28 09:43