2
我創建了一個新表VISNHDR,其中包含以下字段(它不是整個表,但對於我的問題來說這已足夠):AS400 - 使用合併向表中添加新記錄並防止重複密鑰錯誤
- ORDNO (VARCHAR 7) - KEY
- ORDDT (NUMERIC 7,0) - KEY
- ORDTM (NUMERIC 6,0) - KEY
- CRTDT (NUMERIC 7,0)
- CRTTM (NUMERIC 6,0)
我想INSERT
一個新的記錄到這個表,我試圖阻止其插入在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.
什麼是正確的語法來實現我的問題?
我沒有爲您更正的查詢,但問題是您嘗試使用v2表中的結果,但在該表中沒有結果。基本上如你所寫的那樣,「搜索記錄X.如果記錄X不存在,則使用記錄X的內容創建記錄X.」我懷疑在你不匹配的值部分時,你需要最終傳入的參數而不是V2.Field條目。 – Hellion
@Hellion,謝謝它幫助我理解這個問題 – ehh