Salut à tous,
Dans le cadre d'un import de données type fichiers texte via un bulk insert, j'ai besoin de faire un traitement post-import sur des adresses.
J'ai une table Parametre :
- ID (int)
- Type (char) : beaucoup de choses dont 'Voie'
- Valeur (char) : par exemple pour le type 'Voie' : Rue, Avenue, Boulevard, ou encore Hameau
J'ai une table Adresse :
- ID (int)
- Numero (char)
- IdTypeVoie (int)
- Adresse1 (char)
- Adresse2 (char)
- Adresse3 (char)
Mon import de données rempli les champs Adresse2 et Adresse3, parfois Adresse1, Adresse2, Adresse3
Dans un de ces champs (pas défini et potentiellement variable d'une ligne à l'autre), on est censé trouver une donnée par '110 Avenue des Champs-Elysées'
Dans mon post import, je dois regarder chaque ligne de la table Adresse et voir si je peux découper un des 3 champs Adressex en N° de voie, type de voie, nom de voie.
Sur le principe, on regarde dans la valeur du champ si on trouve une des valeurs de type 'Voie' de la table paramètre.
Si oui, on prend ce qui est à gauche pour le mettre dans Numero, on prend l'id correspondant de la table Parametre et on le met dans IdTypeVoie, on prend le reste et on le met dans Adresse1, puis on vide le champs (sauf si au départ c'est déjà Adresse1).
On regarde dans l'ordre Adresse1, Adresse2, Adresse3, sachant que si on peut en découper un, on ne regarde pas les autres, on passe à la ligne suivante.
Je me sens un peu léger pour faire ça en SQL (requete, script, éventuellement Ps s'il le faut), je me dis que c'est possible mais j'ai quand même un doute.
Je préfèrerais le faire dans le moteur SQL plutôt que dans le logiciel d'import car, prochainement, un des opérateurs va se retrouver à travailler depuis un site distant (le logiciel sera sur son poste, le serveur SQL sur un autre site géographique). Et ce ne sera pas, à priori, le seul dans l'avenir.
Pour des raisons de performances, je voudrais donc éviter le plus possible d'avoir à récupérer une masse de données, les traiter en local, pour les renvoyer ensuite.
Une volumétrie de 20000 lignes ne serait pas exceptionnelle, une durée de traitement serait encore acceptable jusqu'à environ 2 min, je pense.
Partager