J'ai créé une nouvelle table VISNHDR avec les champs suivants (ce n'est pas la table entière mais c'est suffisant pour ma question):AS400 - Utiliser Merge pour ajouter un nouvel enregistrement à une table et éviter une erreur de doublon
- ORDNO (VARCHAR 7) - KEY
- ORDDT (NUMERIC 7,0) - KEY
- ORDTM (NUMERIC 6,0) - KEY
- CRTDT (NUMERIC 7,0)
- CRTTM (NUMERIC 6,0)
Je suis en train de INSERT
un nouveau record à cette table et je suis en train d'empêcher son insertion dans le cas d'un duplicate key
. Je préfère le faire dans une requête au lieu d'avoir une requête pour vérifier si la duplication existe et une autre pour insérer l'enregistrement. Selon mes recherches sur le net, j'ai essayé d'utiliser MERGE
mais sans succès.
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
);
Je reçois une erreur:
Row not found for MERGE.
Quelle est la syntaxe correcte pour obtenir mon problème?
Je n'ai pas de requête corrigée pour vous, mais le problème est que vous essayez d'utiliser les résultats de votre table v2, quand il n'y a pas de résultats dans cette table. Fondamentalement comme écrit, vous avez "Rechercher l'enregistrement X. Si l'enregistrement X n'existe pas, utilisez le contenu de l'enregistrement X pour créer l'enregistrement X." Je soupçonne que dans votre section Valeurs non-appariées, vous avez besoin des paramètres que vous allez transmettre à la place des entrées V2.Field. – Hellion
@Hellion, merci cela m'aide à comprendre le problème – ehh