如何在Sybase DB的合并语句中生成不同的GUID

时间:2018-07-16 05:18:07

标签: oracle plsql merge guid sybase-ase

我是使用MERGE语句和GUID的新手。下面的Statement中的Insert生成相同的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')

1 个答案:

答案 0 :(得分:1)

在当前语法中,将对查询一次评估NEWID()BIF调用。 您通常可以通过取一列并以某种方式将其作为BIF调用的参数来强制执行每一行的评估。 NEWID()接受0和1作为参数,因此您可以尝试执行以下操作-假设STU_ID是整数列:

NEWID(ISNULL(STU_ID,0)* 0)