oracle - 如何在 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')
解决方案
在当前语法中,NEWID() BIF 调用为查询计算一次。您通常可以通过获取一列并以某种方式将其作为 BIF 调用的参数来强制评估每一行。NEWID() 接受 0 和 1 作为参数,所以你可以尝试这样的事情——假设 STU_ID 是一个整数列:
NEWID(ISNULL(STU_ID,0)*0)
推荐阅读
- javascript - 为什么输出是 01122?
- ruby-on-rails - 单击反应路由器中的后退/前进按钮时如何修复数据重复/删除
- r - `dplyr::summarise` 不接受外部函数
- java - 在 docker 中构建 openjdk 11 javafx 应用程序
- javascript - 无法使用密码字段 Firefox
- c# - 我想获取与我连接到同一网络的服务器的 IP 地址,但我不断收到错误,所以现在手动输入
- mysql - 不允许主机 'XXX' 连接到此 MySQL 服务器 (V.8)
- python - 如何在python的循环中不正确地修复语法错误“继续”
- ubuntu - Amazon EC2 Ubuntu Postfix-SASL 错误:找不到有价值的机甲
- regex - 如何替换和之后的单词:当你得到无法识别的转义序列时?