首页 > 解决方案 > 如何在 Sybase DB 的 Merge 语句中生成不同的 GUID

问题描述

我是使用 MERGE 语句和 GUID 的新手。以下语句中的插入生成相同的 GUID(NEWID() 为所有记录生成相同的 GUID)。有人可以指导我在这种情况下如何生成唯一的 GUID 吗?

  MERGE INTO TABLE_A A
    USING (SELECT NEWID() AS SRCID,STU_ID,CAMPUS_ID,DT_ENTRY,SCH_YR,DTS FROM 
  TABLE_B) B ON (B.DTS = A.DLM)
    WHEN MATCHED THEN UPDATE 
            SET A.KEY1 = B.STU_ID
               ,A.KEY2 = B.CAMPUS_ID
               ,A.KEY3 = B.SCH_YR
               ,A.KEY4 = B.DT_ENTRY
               ,A.DLM = B.DTS
               ,A.SOURCE_ID = B.SRCID
               ,A.TYPE = 'TYPE'
    WHEN NOT MATCHED THEN INSERT 
                (A.KEY1
                ,A.KEY2
                ,A.KEY3
                ,A.KEY4
                ,A.DLM
                ,A.SOURCE_ID
                ,A.TYPE) VALUES 
                (B.STU_ID
                ,B.CAMPUS_ID
                ,B.SCH_YR
                ,B.DT_ENTRY
                ,B.DTS
                ,NEWID()
                ,'TYPE')

标签: oracleplsqlmergeguidsap-ase

解决方案


在当前语法中,NEWID() BIF 调用为查询计算一次。您通常可以通过获取一列并以某种方式将其作为 BIF 调用的参数来强制评估每一行。NEWID() 接受 0 和 1 作为参数,所以你可以尝试这样的事情——假设 STU_ID 是一个整数列:

NEWID(ISNULL(STU_ID,0)*0)


推荐阅读