【发布时间】:2021-08-22 13:02:46
【问题描述】:
在我的存储过程中,我有多个从一个数据库到另一个数据库的 INSERT IGNORE INTO 语句,但它们可能没有相同的表。所以我要做的就是跳过那个 SQL 语句,如果表不存在则继续下一个。
这是我的代码:
SET @ins = CONCAT('INSERT IGNORE INTO ', databaseName, '.currentYear SET year = YEAR(now()) + 1;');
PREPARE stmt FROM @ins;
EXECUTE stmt;
SET @ins = CONCAT('INSERT IGNORE INTO ', databaseName, '.table1 SELECT * FROM table1;');
PREPARE stmt FROM @ins;
EXECUTE stmt;
SET @ins = CONCAT('INSERT IGNORE INTO ', databaseName, '.table2 SELECT * FROM table2;');
PREPARE stmt FROM @ins;
EXECUTE stmt;
SET @ins = CONCAT('INSERT IGNORE INTO ', databaseName, '.table3 SELECT * FROM table3;');
PREPARE stmt FROM @ins;
EXECUTE stmt;
等等.. 100 多个这样的语句。因此,当其中一个引发异常“表不存在”时,我想忽略该错误并继续下一条语句,依此类推。我怎样才能做到这一点?
提前谢谢你!
【问题讨论】:
-
这是Transact-SQL的命令,我用的是MySQL
-
您可以查看here,但如果您不需要丢失的表,您是否可以仅更改您想要的表的查询 - 删除存储过程中使用的行他们?
-
谢谢你的回答,我会仔细看看那个帖子。不,我无法更改查询,因为会有一个包含这些表的数据库,我永远不会知道数据库是否有某些表,或者是否没有,这就是过程如此长的原因。跨度>
标签: mysql sql error-handling dbforge