表 A 的结构很简单:
ID
FOREIGN_ID
ORIGIN
FOREIGN_ID
和ORIGIN
上方有一个唯一的键以防止重复。
表 B 有很多字段,但有趣的是
ORIGIN_ID
ORIGIN
表 B 可以有许多具有相同 origin 和 origin_id 的行。我的目标是在表 B 上创建一个插入触发器,仅将唯一的
ORIGIN_ID/ORIGIN
组合插入到表 A 中。
但首先,我需要制作一个工作插入,以避免插入重复项。在触发器中时,将使用表 B 行中的值,而不是这些硬编码值
MERGE INTO MYLIB.TABLE_A AS TARGET
USING
( SELECT FOREIGN_ID , ORIGIN FROM MYLIB.TABLE_A ) AS SRC
ON SRC . FOREIGN_ID = '123' AND SRC . ORIGIN = 'ABC'
WHEN NOT MATCHED THEN
INSERT ( FOREIGN_ID , ORIGIN ) VALUES ( '123' , 'ABC' )
我第一次执行该语句时,它按预期工作。表 A 中添加了一行。
第二次执行时,我希望它什么也不做,没有错误。
但是我明白了
[Code: -803, SQL State: 23505] [SQL0803] Duplicate key value specified.
我遗漏了什么或做得不正确?
这不是硬编码测试合并的方法...
您想使用“表值构造函数”(TVC)。
试试这个(扩展到 2 行,以便您可以了解如何使用 TCV):
MERGE INTO MYLIB.TABLE_A AS TARGET
USING
( values ('123','ABC'),('456','DEF')) as SRC (FOREIGN_ID, ORIGIN)
on SRC.FOREIGN_ID TARGET.FOREIGN_ID = AND SRC.ORIGIN = TARGET.ORIGIN
WHEN NOT MATCHED THEN
INSERT ( FOREIGN_ID , ORIGIN ) VALUES ( SRC.FOREIGN_ID, SRC.ORIGIN );