Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/11/2010, 21h55   #1
Invité régulier
 
Inscription : septembre 2009
Messages : 14
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : septembre 2009
Messages : 14
Points : 6
Points : 6
Par défaut Mise à jour d'une base à partir d'un fichier CSV

Bonjour à tous,

Je viens vers vous pour une demande d'aide. Je suis actuellement entrain de développer une petite application, j'utilise une base de donnée MS SQL Server 2008 Express.

Dans mon application, j'ai une fenêtre qui "gère" la mise à jour d'une de mes tables. Tout les jours, je récupère un fichier csv (de quelques méga). Je le découpe et le traite ainsi :
Code :
1
2
3
4
5
6
7
string[] decoupe = File.ReadAllLines(pathDuFichier);
FOR (int i = 1; i < decoupe.Length; i++)
{
   string[] decoupeEnLigne = decoupe[i].Split(',');
 
   // Traitement si présent -> UPDATE sinon INSERT - en Linq TO SQL.
}
C'est un peu barbare, et en plus pas très optimisé en vitesse de traitement. Là, je suis à plus de 30 minutes pour traiter 128000 lignes

J'aurais voulu savoir s'il y avait une manière plus rapide (une commande SQL,...).
Pour ma part j'ai pensé à faire (toujours en restant dans mon idée), ouvrir plusieurs Thread pour traité le fichier.

Merci pour vos réponses, idées, sujétions.
slydefr007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2010, 23h20   #2
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 720
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 720
Points : 6 840
Points : 6 840
Bonsoir,

Voyez du côté de l'utilitaire en ligne de commande bcp ou la procédure stockée BULK INSERT

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 09h37   #3
Invité régulier
 
Inscription : septembre 2009
Messages : 14
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : septembre 2009
Messages : 14
Points : 6
Points : 6
Je pense utilisé le BULK INSERT dans une une procédure stocké.

Par contre, dans mon fichier CSV, il y a des lignes que je ne souhaite pas intégrer, je dois rajouter un
Est-ce que cela fonctionne ?
Je veux dire, si je met un WHERE, le test se fait sur chaque ligne ?

Ensuite autre question, si je dois faire un Update (non un Insert), le BULK fait la différence, ou alors je dois faire un IF EXIST sur la clé ?
slydefr007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 14h31   #4
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 658
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

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

Informations forums :
Inscription : janvier 2005
Messages : 4 658
Points : 8 687
Points : 8 687
Bonjour,

L'instruction BULK INSERT n'admet pas de filtres, donc vous ne pouvez pas y accoler un WHERE.
Vous devriez plutôt réaliser votre import dans une table réservée à cet effet, puis utiliser l'instruction MERGE pour mettre à jour les lignes que vous identifiez comme déjà existante, ou pour ajouter les lignes que vous identifiez comme manquantes

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h17.


 
 
 
 
Partenaires

Hébergement Web