In soldoni ho un problema nel modificare una query di INSERT.
La situazione è questa: ho due tabelle che chiameremo Tabella1 e Tabella2, una contenenti degli Ordini e l'altra delle Distinte.
In ciascuna delle 2 tabelle ha due colonne, una con un ID univoco del documento (IdDocORD o IdDocDST) e l'altra con un numero (NumOrd o NumDis)
In un vista chiamata "Vista_Correlazione" ho la corrispondenza tra i due tipi di documenti in base al loro numero.
La vista è fatta di 2 colonne chiamate NRORD e NRDST dove a coppie sono indicati i documenti correlati
A me interessa leggere queste correlazioni, prendere i relativi IdDocORD e IdDocDST di queste coppie e scriverle in una tabella chiamata IdDocLinks.
Siccome le correlazioni sono bilaterali (cioè se l'ordine 23 corrisponde ala distina 57 è vero pure il contrario) sono ricorso a questi due INSERT
- Codice: Seleziona tutto
INSERT Into IdDocLinks (IdDocSource, IdDocDest)
SELECT Tabella1.IdDoc as IdDocORD, Tabella2.IdDoc as IdDocDST
FROM Vista_Correlazione
join Tabella1 on NumOrd = NRORD
join Tabella2 on NumDis = NRDST
INSERT Into IdDocLinks (IdDocDest, IdDocSource)
SELECT Tabella1.IdDoc as IdDocORD, Tabella2.IdDoc as IdDocDST
FROM Vista_Correlazione
join Tabella1 on NumOrd = NRORD
join Tabella2 on NumDis = NRDST
Se faccio girare il codice la prima volta è tutto ok.
Ma le correlazioni potrebbero aumentare dopo qualche ora e se rilancio quei comandi ho questo errore:
Violazione del vincolo PRIMARY KEY 'IdDocLinksPK'. Impossibile inserire la chiave duplicata nell'oggetto 'dbo.IdDocLinks'
Vorrei quindi poter rifare i due INSERT ma importando solo i record che non erano già presenti in IdDocLinks.
Ho provato a usare dei NOT EXISTS ma forse a causa del doppio join non sono riuscito a farlo funzionare.
Lo stesso dicasi di NOT IN o MERGE.
Quale soluzione mi suggerite?
Grazie