AS400 - 使用 Merge 将新记录添加到 table 并防止重复键错误
AS400 - Using Merge to add a new record to a table and prevent from a duplicate key error
我创建了一个新的 table VISNHDR,其中包含以下字段(它不是整个 table 但这足以解决我的问题):
- ORDNO (VARCHAR 7) - KEY
- ORDDT (NUMERIC 7,0) - KEY
- ORDTM (NUMERIC 6,0) - KEY
- CRTDT (NUMERIC 7,0)
- CRTTM (NUMERIC 6,0)
我正在尝试 INSERT
对此 table 的新记录,并且我正试图在 duplicate key
的情况下阻止它的插入。
我更喜欢在一个查询中执行此操作,而不是让一个查询检查是否存在重复,而另一个查询插入记录。
根据我在网上的研究,我尝试使用 MERGE
但没有成功。
MERGE INTO visnhdr v1 USING ( SELECT
ordno,
orddt,
ordtm
FROM
visnhdr
WHERE
ordno = 'M12345'
AND orddt = 1170101
AND ordtm = 101010
) AS V2(ordno,orddt,ordtm)
ON (
v1.ordno = v2.ordno
AND v1.orddt = v2.orddt
AND v1.ordtm = v2.ordtm
)
WHEN NOT MATCHED THEN INSERT (
ordno,
orddt,
ordtm,
crtdt,
crttm
) VALUES (
v2.ordno,
v2.orddt,
v2.ordtm,
1170102,
101011
);
我收到一个错误:
Row not found for MERGE.
解决我的问题的正确语法是什么?
我找到了正确的语法:
MERGE INTO VISNHDR V1 USING (
VALUES ('M12345', 1170101, 101011, 1170103, 101012)) V2 (ORDNO, ORDDT, ORDTM, CRDDT, CRTTM)
ON V1.ORDNO = V2.ORDNO AND V1.ORDDT = V2.ORDDT AND V1.ORDTM = V2.ORDTM
WHEN NOT MATCHED THEN
INSERT VALUES(V2.ORDNO, V2.ORDDT, V2.ORDTM, V2.CRDDT, V2.CRTTM)
评论:
根据您定义列的方式,您可能会收到一条错误消息:
one or more of the columns omited from the column list was created as
not null.
这是我遇到的错误,我需要将 table 中的其他字段添加到查询中。这与我在 post.
中遇到的语法问题无关
我创建了一个新的 table VISNHDR,其中包含以下字段(它不是整个 table 但这足以解决我的问题):
- ORDNO (VARCHAR 7) - KEY
- ORDDT (NUMERIC 7,0) - KEY
- ORDTM (NUMERIC 6,0) - KEY
- CRTDT (NUMERIC 7,0)
- CRTTM (NUMERIC 6,0)
我正在尝试 INSERT
对此 table 的新记录,并且我正试图在 duplicate key
的情况下阻止它的插入。
我更喜欢在一个查询中执行此操作,而不是让一个查询检查是否存在重复,而另一个查询插入记录。
根据我在网上的研究,我尝试使用 MERGE
但没有成功。
MERGE INTO visnhdr v1 USING ( SELECT
ordno,
orddt,
ordtm
FROM
visnhdr
WHERE
ordno = 'M12345'
AND orddt = 1170101
AND ordtm = 101010
) AS V2(ordno,orddt,ordtm)
ON (
v1.ordno = v2.ordno
AND v1.orddt = v2.orddt
AND v1.ordtm = v2.ordtm
)
WHEN NOT MATCHED THEN INSERT (
ordno,
orddt,
ordtm,
crtdt,
crttm
) VALUES (
v2.ordno,
v2.orddt,
v2.ordtm,
1170102,
101011
);
我收到一个错误:
Row not found for MERGE.
解决我的问题的正确语法是什么?
我找到了正确的语法:
MERGE INTO VISNHDR V1 USING (
VALUES ('M12345', 1170101, 101011, 1170103, 101012)) V2 (ORDNO, ORDDT, ORDTM, CRDDT, CRTTM)
ON V1.ORDNO = V2.ORDNO AND V1.ORDDT = V2.ORDDT AND V1.ORDTM = V2.ORDTM
WHEN NOT MATCHED THEN
INSERT VALUES(V2.ORDNO, V2.ORDDT, V2.ORDTM, V2.CRDDT, V2.CRTTM)
评论:
根据您定义列的方式,您可能会收到一条错误消息:
one or more of the columns omited from the column list was created as not null.
这是我遇到的错误,我需要将 table 中的其他字段添加到查询中。这与我在 post.
中遇到的语法问题无关