OVH Cloud OVH Cloud

INSERT

6 réponses
Avatar
Hugues Marlier
Bonjour =E0 tous,
J'utilise une requ=EAte INSERT pour migrer mes donn=E9es.
La requ=EAte provoque une erreur de conflit de cl=E9 primaire et s'arr=EA=
te=20
d=E9s qu'un enregistrement est d=E9j=E0 pr=E9sent
Y a t-il moyen d'obtenir le m=EAme fonctionnement que sous Access, cad qu=
e=20
la requ=EAte continue =E0 ins=E9rer les enregistrements sans conflit ?
en gros je cherche un peu de confort.

6 réponses

Avatar
Guillaume Davion
Ta clef primaire est bien en auto-increment? Car s'il y a une erreur,
c'est apparement que tu tentes d'insérer deux lignes avec la même
clef primaire, ce qui est strictement interdit.
Avatar
Hugues Marlier
Guillaume Davion a écrit:

Ta clef primaire est bien en auto-increment? Car s'il y a une erreur,
c'est apparement que tu tentes d'insérer deux lignes avec la même
clef primaire, ce qui est strictement interdit.





Oui c'est bien ce que je dis, il y a conflit de PK.
Mais tu ne me donnes pas de solution.

Ma clé primaire est en auto-incrément et je positionne IDENTITY-INSE RT
sur ON pour écrire la clé primaire
voici ma solution qui utilise une jointure gauche
set IDENTITY_INSERT Tbldest ON
INSERT INTO Tbldest (ID,Designation) SELECT Tblsrc.ID,Tblsrc.Designation
from Tblsrc left join Tbldest on (Tblsrc.ID=Tbldest.ID) where Tbldest.I D
is null
Avatar
Guillaume Davion
Et pourquoi tu ne laisse pas la table destination en auto-increment et
tu n'y insérerais que la designation? Il y a une autre table liée sur
cette id qui doit être reportée à l'identique dans la base
destination?

Dans ce genre de cas, il peut être utilise de créer un lot DTS pour
gérer tout ça de façon propre, surtout s'il s'agit d'une fusion de
donnée, et pas simplement d'une copie
Avatar
Hugues Marlier
Oui j'ai pas mal de tables liées et donc je souhaite garder la clé
d'origine.
Je vais essayer de faire un lot DTS.

merci de ton aide.

Guillaume Davion a écrit:

Et pourquoi tu ne laisse pas la table destination en auto-increment et
tu n'y insérerais que la designation? Il y a une autre table liée su r
cette id qui doit être reportée à l'identique dans la base
destination?

Dans ce genre de cas, il peut être utilise de créer un lot DTS pour
gérer tout ça de façon propre, surtout s'il s'agit d'une fusion de
donnée, et pas simplement d'une copie





Avatar
Guillaume Davion
Si tu as besoin d'un coup de main pour l'écriture du lot, n'hésite
pas :)
Avatar
Philippe T [MS]
Bonjour,

Puis-je voir la requête ?

Normalement, il suffit de faire quelque chose du genre :

INSERT INTO Tbldest (ID,Designation)
SELECT Tblsrc.ID,Tblsrc.Designation
FROM Tblsrc
WHERE Tblsrc.ID NOT IN (SELECT ID FROM Tbldest)

----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France

"Hugues Marlier" wrote in message
news:
Oui j'ai pas mal de tables liées et donc je souhaite garder la clé
d'origine.
Je vais essayer de faire un lot DTS.

merci de ton aide.

Guillaume Davion a écrit:

Et pourquoi tu ne laisse pas la table destination en auto-increment et
tu n'y insérerais que la designation? Il y a une autre table liée sur
cette id qui doit être reportée à l'identique dans la base
destination?

Dans ce genre de cas, il peut être utilise de créer un lot DTS pour
gérer tout ça de façon propre, surtout s'il s'agit d'une fusion de
donnée, et pas simplement d'une copie