Bonjour,
voici ma problématique :
Je participe au développement d'une application pour une entreprise que nous appellerons N pour le compte d'un éditeur de logiciel que nous appellerons L.
L a jadis fournit un logiciel de gestion à N que nous nommerons O.
Aujourd'hui N a demandé à L de lui refondre son SI en fusionnant tous les petits softs gravitant autour de O dans O qui devient alors T.
Mon chef de projet m'a demandé de travailler sur l'import des données de O vers T.
O est donc une gestion commerciale standard spécialisée dans le domaine de N.
T est donc cette gestion commerciale + tous les ajouts réalisés à la demande de N.
Je dois donc fusionner les données de O et des softs autour dans T. La description de l'analyse correspond dans les grandes lignes.
La procédure mise au point avec le client est la suivante :
Pour chaque fichier de la BDD (de O), nous leur fournissons un export CSV + la description du fichier de destination (BDD de T). Ils font les conversions à la main eux-même puis on intègre.
Pour l'intégration des données, nous comptions utiliser les requêtes de type BULK INSERT.
J'en arrive enfin à la problématique principale, à savoir l'intégration dans la nouvelle analyse des clefs autoincrement. La plupart des fichiers ayant un identifiant automatique, et cet identifiant étant utilisé en clef étrangère, il nous faut récupérer dans la BDD de T les PK ID autoincrement avec les bonnes valeurs.
Seulement pas moyen d'y arriver.
Voici comment je procède. Pour tester vous pouvez vous créer une BDD de test.
La création de la table de test se fait comme ceci :
La table de test est donc constituée de 2 colonnes, une ID auto et une varchar(10).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 CREATE TABLE [dbo].[TEST_BULK] ( [TB_PK_ID] bigint IDENTITY(1, 1) NOT NULL, [TB_DATA_1] varchar(10) COLLATE French_CI_AS NULL, PRIMARY KEY CLUSTERED ([TB_PK_ID]) ) ON [PRIMARY] GO
Maintenant nous allons nous occuper de l'import via BULK INSERT.
Pour se faire, il nous faut d'abord un fichier de format de la table TEST_BULK.
Ouvrez une console DOS et exécutez la ligne de commande suivante :
J'ai donc la BDD sur mon poste local, l'instance s'appelle EXPRESS2008R2, user vd, mdp vd et j'obtiens en sortie un fichier de format test_bulk.fmt (généralement il sort dans MesDocuments).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 bcp test.dbo.TEST_BULK format nul -f test_bulk.fmt -S 127.0.0.1\EXPRESS2008R2 -U vd -P vd
Préparez ensuite un CSV à importer :
La première colonne est l'identifiant automatique. La table dans la BDD venant d'être créée l'id auto sera à 1 pour le premier enregistrement inséré et nous on veut y mettre 6.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 6;TOTO 7;TATA 8;TITI 9;TUTU 10;TETE
La requête BULK INSERT à exécuter est la suivante :
Attention aux chemins d'accès aux fichiers .csv et .fmt.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 USE [test] GO BULK INSERT [dbo].TEST_BULK FROM 'D:\scripts.sql\export.TEST_BULK.csv' WITH ( FIRSTROW = 1, MAXERRORS = 0, DATAFILETYPE = 'char', FIELDTERMINATOR = ';', FORMATFILE = 'D:\scripts.sql\TEST_BULK.fmt', ROWTERMINATOR = '\r\n', KEEPIDENTITY, KEEPNULLS) GO
La requête s'exécute sans problème, les données sont importées, sauf que mon problème c'est que pour les id auto ça coince.
J'obtiens les valeurs suivantes : 55, 56, 57, 12337 et 918535151 alors que je devrais avoir 6, 7, 8, 9, et 10 pour la colonne TB_PK_ID.
Quelqu'un aurait-il une idée sur le pourquoi du comment ?
Partager