Archive

Archive for mai 2014

Gestion des exceptions

Je bosse en ce moment sur une application assez âgée.
Elle est un peu dans son troisième âge (> 10 ans) avec un nombre important de personnes ont travaillés dessus (chacun ayant fait à sa sauce).
Comme toute application legacy, il y a beaucoup de choses qui sont à redire.

Dernièrement, on a eu une exception un peu obscure qui nous a donné un peu de fil à retordre.
Le premier réflexe a été de regardé dans le journal d’événements (puisqu’on logue dedans) pour savoir ce qu’il se passait.
Et là, c’est un peu le drame : rien d’exploitable. La StackTrace était tronquée, il n’y avait aucune réelle information…

Après avoir râlé et pesté tout ce que je pouvais (et accessoirement résoudre le problème), il m’a été demandé de faire un état des lieux de la gestion d’exceptions et faire des propositions pour améliorer les choses (la prochaine fois, je penserais à la fermer).

Ce billet est le fruit de ce travail (en plus court), avec tout plein de références.

Lire la suite…

Catégories :Développement, Divers

SQL-Server – RANK et ROW_NUMBER

Récemment, j’ai du faire un petit exercice relativement simple : importer des données en base depuis un fichier CSV.
Avec le bulk insert, c’est assez simple :

BULK INSERT #Bulk
FROM 'C:\Temp\FichierAImporter.csv' 
WITH 
(
	FIELDTERMINATOR = ';',
	ROWTERMINATOR = '\n',
	CODEPAGE = 'ACP',
	ROWS_PER_BATCH = 35000
)

Là où ça s’est compliqué, c’est la génération des identifiants fonctionnels avant leur insertion dans les « vraies » tables.

Pour simplifier un peu, voici le cas.
Je dois importer les nouvelles adresses de clients.
J’ai deux champs : Client et Adresse qui sont chargées depuis le fichier CSV.

Mais surtout, j’ai deux identifiants fonctionnels à créer.
Le premier est un identifiant interne, de la forme « FR00000000 » dont la partie numérique est incrémentée pour chaque entrée. Le prochain identifiant est lisible depuis une table.
Le second identifiant est externe, c’est un numérique incrémenté par client.
C’est à dire que le client #1 possèdant déjà 50 adresses, la suivants sera la 51, la prochaine pour le client #2 est la 6ème.

La bonne vieille méthode, c’est de faire des boucles pour alimenter tout le bazar.
Mais comme on est dans une base de données, c’est quand même nettement mieux de faire de l’ensembliste.
C’est là que RANK et ROW_NUMBER viennent à la rescousse !

Lire la suite…

Catégories :Développement, SGBDR, Sql Server