IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Importation plusieurs fichiers à plat


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 49
    Points
    49
    Par défaut Importation plusieurs fichiers à plat
    Bonjour à tous,

    Voici ma problématique :

    Je dois importer tout les jours 78 fichiers à plat dans mon sql Server 2005,

    Ces fichiers sont tous formatés de la même façon et sont stockés au même endroits.

    Il va s'en dire que le clic droit "importer source de fichier" à plat est a proscrire ^_^, je l'ai fais 1 fois pour remplir ma base , donc j'ai toutes les structures des tables

    Donc voici ce que j'ai fait pour 1 fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    USE [myBdd]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    CREATE TABLE [dbo].[actionjur](
    	[NUMDOSJU] [int](100) NOT NULL,
    	[ACTION] [nvarchar](150) NULL,
    	[DATEREL] [datetime] NULL,
    FOREIGN KEY ([NUMDOSJU])
    REFERENCES [dossjur]([NUMDOSJU])
    ) ON [PRIMARY]
     
    DECLARE @bulk_cmd nvarchar(1000)
    SET @bulk_cmd = 'BULK INSERT actionjur
    FROM ''D:\donnees\actionjur.txt'' 
    WITH (ROWTERMINATOR = '''+CHAR(10)+''',FIRSTROW = 2 , FIELDTERMINATOR =''\t'' )'
    EXEC(@bulk_cmd)
    GO
    Ce bout de code est un copié collé de ce que j'ai pu trouver sur internet, je n'y connais pas grand chose en Script SQL

    Comment puis-je automatiser tout cela , sachant que toutes mes tables n'ont pas le même nombre de colonne.
    Je souhaiterai éviter de recopier 78 fois la partie "Declare [...] Exec" en changeant mon nom de fichier.

    Je me tiens à votre disposition pour d'avantage de renseignement.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 565
    Points
    52 565
    Billets dans le blog
    5
    Par défaut
    Faites 78 fichiers de format Bulk load, voir dans l'aide en ligne :
    "Utilisation d'un fichier de format pour importer des données en bloc"

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Vous pouvez penser à utilisez SSIS pour ce faire.
    Il existe un composant "for each" qui vous permettra de faire une boucle sur tous les fichiers de votre repertoire et récupérant le nom du fichier dans une variable.

  4. #4
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 49
    Points
    49
    Par défaut
    Bonjour

    Merci à vous pour vos réponses.

    @SQLpro => Je ne vois pas comment on l'utilise . . . Est-ce qu'un truncate table en amont suffit ou est-ce que je dois faire un drop table et donc par conséquent faire un create table ?

    @Ptit_Dje => Je vais creuser aussi de ce coté là, par contre je rencontre un problème lors de la création de mon SSIS : lorsqu'il s'agit d'intégrer des champs de type date de ce format : 01/01/1900 00:00:0 je suis obligé de faire dans le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    create table "MonChampDate" nvarchar(50)
    et ensuite une fois la procédure fini repasser sur ce champ via le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Alter Table matable alter column "MonChampDate datetime NULL ,"
    Et lorsque j'ai une table qui a 250 colonnes et dont la moitié ce sont des dates c'est un peu "chiant" tous ces Alter Table.

    Merci à vous 2

  5. #5
    Membre chevronné

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Août 2007
    Messages : 1 216
    Points : 1 758
    Points
    1 758
    Par défaut
    Bonjour,

    Au niveau de la définition de votre "connection manager" définissant la structure de votre fichier, double cliquez dessus et rendez vous dans l'onglet advanced.
    A cet endroit, vous avez la liste des champs qui sont remontés de votre fichier.
    Pour les champs contenant des dates, changez le datatype par défaut string [DT_STR] en database timestamp [DT_DBTIMESTAMP].

    Vous devrez le faire pour tous les champs de type date...

    Pareil si vous devez gérer des entiers, ou des floats... SSIS voit un fichier texte, donc pour lui basiquement, tout est texte. A vous de lui définir la structure de votre fichier.

  6. #6
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 49
    Points
    49
    Par défaut
    Bon bah du coup j'ai utilisé cette commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    DECLARE @bulk_cmd nvarchar(1000)
    SET @bulk_cmd = 'BULK INSERT actionjur
    FROM ''D:\donnees\actionjur.txt'' 
    WITH (ROWTERMINATOR = '''+CHAR(10)+''',FIRSTROW = 2 , FIELDTERMINATOR =''\t'' )'
    EXEC(@bulk_cmd)
    GO
    Mais par contre lors de mon insertion les " à " ils me les transforme en " Ó " , les "é" en "Ú"

    Peux ton contrer cela ?

    En vous remerciant par avance.

  7. #7
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Si vous décidez de partir sur la solution BULK INSERT, vous pouvez stocker le nom des fichiers dans une table.
    Si ceux-ci dépendent d'une date, stockez la partie constance du nom de vos fichiers dans une table, et faites une vue qui vous calcule le nom final.

    Concernant votre problème de caractères, quelle est la collation de votre base de données ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT	name, collation_name
    FROM	sys.databases
    WHERE	name = 'maBD'
    Dans quel format est enregistré votre fichier ? ANSI ou Unicode ?

    @++

  8. #8
    Membre du Club
    Inscrit en
    Août 2009
    Messages
    81
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 81
    Points : 49
    Points
    49
    Par défaut
    La collation de la base de données : French_CS_AS
    et mes fichiers c'est du ANSI (du moins c'est ce qui est marqué lorsque je l'ouvre avec mon notepad++)

Discussions similaires

  1. Erreur lors de l'importation de plusieurs fichiers plats
    Par jaskoula1979 dans le forum VBA Access
    Réponses: 2
    Dernier message: 22/09/2011, 17h38
  2. [SSIS] [2K5] Importation de plusieurs fichiers plat
    Par samus535 dans le forum SSIS
    Réponses: 3
    Dernier message: 12/05/2010, 23h49
  3. Importer plusieurs fichiers dans un classeur
    Par formabox dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 11/09/2007, 17h50
  4. Réponses: 9
    Dernier message: 22/06/2007, 08h36
  5. import de fichier plat dans une table temporaire
    Par bilay dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/01/2007, 12h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo