Mysql

MySQL 儲存過程 - 設置 AUTO_INCREMENT 值

  • June 3, 2020

我在編寫儲存過程時遇到了麻煩,如下所示

CREATE DEFINER=`dbcomexuser`@`%` PROCEDURE `clearance_imp`(IN CAPIfilename VARCHAR(12))
BEGIN

DECLARE `_rollback` BOOL DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
DECLARE _refID INT DEFAULT 0;

START TRANSACTION;

SELECT MAX(imp_id) + 1 INTO _refID FROM temp_imp;

INSERT INTO filenamedt (filename, filedate) VALUES (CAPIfilename, now());

INSERT INTO imp__description (imp_id, imp_description) (SELECT imp_id, TRIM(descricaoProduto) FROM temp_imp);

TRUNCATE TABLE temp_imp;

ALTER TABLE temp_imp AUTO_INCREMENT = _refID;

IF `_rollback` THEN
   ROLLBACK;
ELSE
   COMMIT;
END IF;
END

主要問題是 MySQL Workbench 輸出行有錯誤:

ALTER TABLE temp_imp AUTO_INCREMENT = _refID;

但我無法弄清楚發生了什麼。

事實是:我正在從數百個文件中載入我的數據庫,並且數據儲存在許多不同的表中。

在我載入每個文件後,我 trucate 臨時表,因為它比使用刪除更快,所以我載入另一個文件。當我 trucate 表時,MySQL 從 0 開始自動遞增編號,但我需要最後一個 int 編號才能再次使用它,因為我將它用作主鍵。

有人可以幫助我嗎?

使用準備好的語句

DELIMITER $$
CREATE DEFINER=`dbcomexuser`@`%` PROCEDURE `clearance_imp`(IN CAPIfilename VARCHAR(12))
BEGIN

DECLARE `_rollback` BOOL DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET `_rollback` = 1;
DECLARE _refID INT DEFAULT 0;

START TRANSACTION;

SELECT MAX(imp_id) + 1 INTO _refID FROM temp_imp;

INSERT INTO filenamedt (filename, filedate) VALUES (CAPIfilename, now());

INSERT INTO imp__description (imp_id, imp_description) (SELECT imp_id, TRIM(descricaoProduto) FROM temp_imp);

TRUNCATE TABLE temp_imp;

SET @sql = "ALTER TABLE temp_imp AUTO_INCREMENT =  ?";
PREPARE stmt1 FROM @sql;
SET @a = _refID;
EXECUTE stmt1 USING @a;
DEALLOCATE PREPARE stmt1;
IF `_rollback` THEN
   ROLLBACK;
ELSE
   COMMIT;
END IF;
END$$
DELIMITER ;

如果您使用工作台並創建儲存過程,則不需要 DELIMITER

引用自:https://dba.stackexchange.com/questions/268450