如何编写插入忽略或更新此查询?

问题描述

我有一个用于在登台表和MST表之间合并数据的MysqL存储过程。

CREATE PROCEDURE `LDA_MERGE_TRACTOR_EQUPIMENT`()
BEGIN
    INSERT IGnorE
INTO Appian.LDA_CETARIS_TRACTOR_EQUIPMENT_MST(
    `Asset #`,`Fleet Code`,`Description`,`Asset Category`,`Asset Type`,`Asset Item`
)
SELECT
    `Asset #`,`Faleet Code`,`Asset Item`
FROM
    Appian.LDA_CETARIS_TRACTOR_EQUIPMENT_STAGING stg
ORDER BY
    `Asset #`
ON DUPLICATE KEY
UPDATE
    `Fleet Code` = stg.`Fleet Code`,`Description` = stg.`Description`,`Asset Category`= stg.`Asset Category`,`Asset Type` = stg.`Asset Type`,`Asset Item` = stg.`Asset Item`;
END

Asset #是两个表的主键。但我收到错误消息:

#1064 - You have an error in your sql Syntax; check the manual that corresponds to your MysqL server version for the right Syntax to use near '' at line 29

Line 29:     `Asset Item` = stg.`Asset Item`;

有人可以帮助我吗?谢谢!

解决方法

您需要按如下所示定义delimeter

DELIMITER $$
CREATE PROCEDURE `LDA_MERGE_TRACTOR_EQUPIMENT`()
BEGIN
    INSERT IGNORE
INTO Appian.LDA_CETARIS_TRACTOR_EQUIPMENT_MST(
    `Asset #`,`Fleet Code`,`Description`,`Asset Category`,`Asset Type`,`Asset Item`
)
SELECT
    `Asset #`,`Faleet Code`,`Asset Item`
FROM
    Appian.LDA_CETARIS_TRACTOR_EQUIPMENT_STAGING stg
ORDER BY
    `Asset #`
ON DUPLICATE KEY
UPDATE
    `Fleet Code` = stg.`Fleet Code`,`Description` = stg.`Description`,`Asset Category`= stg.`Asset Category`,`Asset Type` = stg.`Asset Type`,`Asset Item` = stg.`Asset Item`;
END$$
DELIMITER ;

有关更多信息,请访问this