Question

J'essaie d'effectuer un téléchargement groupé dans une base de données de serveur SQL. Le fichier source contient des doublons que je souhaite supprimer. J'espérais donc que l'opération téléchargerait automatiquement le premier fichier, puis éliminerait le reste. (J'ai défini une contrainte de clé unique). Le problème, c’est que lorsqu’un téléchargement en double est tenté, tout échoue et est annulé. Puis-je simplement dire à SQL de continuer?

Était-ce utile?

La solution

Essayez d'insérer en bloc les données dans la table temporaire, puis SELECT DISTINCT comme @madcolor suggéré ou

INSERT INTO yourTable
SELECT * FROM #tempTable tt
WHERE NOT EXISTS (SELECT 1 FROM youTable yt WHERE yt.id = tt.id)

ou un autre champ de la clause WHERE.

Autres conseils

Si vous utilisez des outils SQL tels que SQL Plus, DBVis ou Toad, je suppose que non. Si vous le faites par programme dans une langue, vous devez diviser pour régner. Vraisemblablement, exécuter une mise à jour ligne par ligne et intercepter chaque exception constituerait un processus trop long. Vous pouvez donc effectuer une opération de traitement par lots en premier sur tout le bloc SQL. En cas d'échec, procédez de la première moitié. Si cela échoue, faites-le sur la première moitié de la première moitié. Itérez de cette façon jusqu'à ce que vous ayez un bloc qui réussit. Supprimez le bloc et suivez la même procédure pour le reste du code SQL. Tout ce qui ne respecte pas une contrainte finira par devenir une seule instruction SQL que vous savez consigner et ignorer. Cela devrait importer autant de fois que possible le traitement en bloc tout en rejetant les lignes non valides.

Utilisez SSIS pour cela. Vous pouvez lui dire de sauter les doublons. Mais d’abord, assurez-vous qu’ils sont de véritables doublons. Et si les données de certaines colonnes sont différentes, comment savoir quel est le meilleur enregistrement à conserver?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top