在带有破折号的列上解除支点

本文关键字:支点 破折号 | 更新日期: 2023-09-27 18:17:43

这是我在SQL Server 2008 R2中的查询:

INSERT VMP_Staging_Products_Temporary
    (FRM_ID, ITEM_ID, ItemDesc, NUMBER_ITEM)
    SELECT upvt.FARM_ID,
    p.REC_ITEM_CODE,
    p.REC_ITEM_NAME_A,
    upvt.NUMBER_ITEM
    FROM VMP_Staging  AS f
    UNPIVOT
    (
        NUMBER_ITEM
        FOR ItemDesc IN ([KHALAS], [FARDH], [OTHER_LULU], [KHENAIZI], [BOUMAAN], [BARHI], [JESH_KHARMA], [REZIZ]
        , [JABRI], [ANBARET_AL_MADINA], [SHISHI], [DABBAS], [NABTET_SAIF], [KHEDRAWI], [HILALI], [MAKTOUMY]
        , [NAMISHI], [SULTANAH], [BAQLAT_AL_TAWAA], [BAQLAT_AL_DAHLA], [BAQLAT_AL_RARENJA], [SUKARY], [SAQEI], [ABU_ZEBED]
        , [MAJDOUL], [SHABIBI], [YOUWANI], [YARDI], [KHADI], [HATIMI], [NEGHAL], [OTHER_SAYER])
    ) AS upvt
    INNER JOIN REC_ITEM AS P
    on p.REC_ITEM_NAME_A  = upvt.ItemDesc

如您所见,我正在REC_ITEM表和unpivot的结果之间进行连接。

问题发生在具有_ABU_ZEBED的列名中,其中REC_ITEM中的值为abu zebed

我该如何解决这个问题?

更新1

如果有一种方法可以使用c#代码来实现,那也很好。因为这是一个从c#调用的存储过程,所以如果有解决方案可以在c#中处理这个问题,我也希望有。

在带有破折号的列上解除支点

取决于是否为常规模式,但至少:

INNER JOIN REC_ITEM AS P
    on replace(p.REC_ITEM_NAME_A, ' ', '_')  = upvt.ItemDesc

性能会很差。

您可以尝试以多种方式加入:

on p.REC_ITEM_NAME_A = upvt.ItemDesc or
   p.REC_ITEM_NAME_A = replace(upvt.ItemDesc, '_', ' ')

或者,删除两边的空格和下划线:

on replace(replace(p.REC_ITEM_NAME_A, '_', ''), ' ', '') =
   replace(replace(upvt.ItemDesc, '_', ''), ' ', '')