【问题标题】:MERGE statement produces multiple "Invalid column name"MERGE 语句产生多个“无效的列名”
【发布时间】:2021-05-13 09:48:52
【问题描述】:

我正在尝试在以下过程中使用 MERGE 语句:

BEGIN

    MERGE INTO dm_udm.D_ANOMALY_TYPES_CATEGORY AS DIM
    USING (SELECT ID AS ID_ANOMALY_TYPES_CATEGORY
            ,AnomalyType
            ,AnomalyCategoryID
            ,AnomalyTypeDesc
        FROM src_udm.AnomalyTypesCategory
    )AS STG (
             ID_ANOMALY_TYPES_CATEGORY
            ,DES_ANOMALY_TYPE
            ,ID_ANOMALY_CATEGORY
            ,DES_ANOMALY_TYPE_DESC
            )
    ON DIM.ID_ANOMALY_TYPES_CATEGORY=STG.ID_ANOMALY_TYPES_CATEGORY
    WHEN MATCHED
        THEN UPDATE SET                     
        DIM.ID_ANOMALY_TYPES_CATEGORY           =   STG.ID_ANOMALY_TYPES_CATEGORY
        ,DIM.DES_ANOMALY_TYPE                   =   STG.AnomalyType
        ,DIM.ID_ANOMALY_CATEGORY                =   STG.AnomalyCategoryID
        ,DIM.DES_ANOMALY_TYPE_DESC              =   STG.AnomalyTypeDesc
    WHEN NOT MATCHED BY TARGET
    THEN INSERT
        (
            ID_ANOMALY_TYPES_CATEGORY   
            ,DES_ANOMALY_TYPE           
            ,ID_ANOMALY_CATEGORY            
            ,DES_ANOMALY_TYPE_DESC      
        )
    VALUES
        (
            STG.ID_ANOMALY_TYPES_CATEGORY
            ,STG.AnomalyType
            ,STG.AnomalyCategoryID
            ,STG.AnomalyTypeDesc
        );
END

但我在程序执行后收到以下错误:

Invalid column name 'AnomalyCategoryID'.
Invalid column name 'AnomalyCategoryID'.
Invalid column name 'AnomalyTypeDesc'.
Invalid column name 'AnomalyTypeDesc'.
Invalid column name 'AnomalyType'.
Invalid column name 'AnomalyType'.

似乎所有别名都是正确的,我不明白为什么会出现此错误。

关于如何解决它的任何想法?提前致谢。

【问题讨论】:

  • 能否请您尝试删除此部分( ID_ANOMALY_TYPES_CATEGORY ,DES_ANOMALY_TYPE ,ID_ANOMALY_CATEGORY ,DES_ANOMALY_TYPE_DESC )
  • AS STG 后跟别名,则不要使用别名。所以删除它们
  • 这些是问题,谢谢。

标签: sql sql-server database stored-procedures merge


【解决方案1】:

问题是您在 AS STG 之后使用别名,请尝试以下操作:

BEGIN

    MERGE INTO dm_udm.D_ANOMALY_TYPES_CATEGORY AS DIM
    USING (SELECT ID AS ID_ANOMALY_TYPES_CATEGORY
            ,AnomalyType
            ,AnomalyCategoryID
            ,AnomalyTypeDesc
        FROM src_udm.AnomalyTypesCategory
    )AS STG 
    ON DIM.ID_ANOMALY_TYPES_CATEGORY=STG.ID_ANOMALY_TYPES_CATEGORY
    WHEN MATCHED
        THEN UPDATE SET                     
        DIM.ID_ANOMALY_TYPES_CATEGORY           =   STG.ID_ANOMALY_TYPES_CATEGORY
        ,DIM.DES_ANOMALY_TYPE                   =   STG.AnomalyType
        ,DIM.ID_ANOMALY_CATEGORY                =   STG.AnomalyCategoryID
        ,DIM.DES_ANOMALY_TYPE_DESC              =   STG.AnomalyTypeDesc
    WHEN NOT MATCHED BY TARGET
    THEN INSERT
        (
            ID_ANOMALY_TYPES_CATEGORY   
            ,DES_ANOMALY_TYPE           
            ,ID_ANOMALY_CATEGORY            
            ,DES_ANOMALY_TYPE_DESC      
        )
    VALUES
        (
            STG.ID_ANOMALY_TYPES_CATEGORY
            ,STG.AnomalyType
            ,STG.AnomalyCategoryID
            ,STG.AnomalyTypeDesc
        );
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-11
    • 2020-04-12
    • 2013-12-13
    • 2014-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多