Mettre à jour une table depuis un fichier formaté CVS dans SQL SERVER

Mettre à jour une table depuis un fichier formaté CVS dans SQL SERVER - SQL/NoSQL - Programmation

Marsh Posté le 06-04-2004 à 20:05:50    

Voilà mon problème (je pense assez simple), je dois développer un site ouaib de e-commerce qui doit être capable de récupérer des données (prix et liste d'articles) sur un serveur FTP au format CVS (fichiers TXT contenant des données séparées par des ";" ).
La première chose est de mettre à jour la table ARTICLE (par exemple) en insérant directement les données contenus dans le fichier texte sans passer par un UPDATE ou un INSERT INTO car sinon vu la taille du fichier (10MO) ca risque d'être laborieux.
 
Surtout que cette opération doit être effectué de manière automatisé tous les jours (c'est un autre problème que je serais résoudre plus tard).
 
Donc travaillant sous ASP.NET et SQL server je me demandais comment procéder (il n'existe pas un truc comme MYSQL qui prend un fichier texte et qui ajoute automatiquement à la table).
Ou réaliser une fonction en VB.NET ou une procédure Transact SQL ?
 
Merci d'avance.


Message édité par pc2000 le 06-04-2004 à 20:07:16
Reply

Marsh Posté le 06-04-2004 à 20:05:50   

Reply

Marsh Posté le 06-04-2004 à 20:24:08    

Je pense qu'il faut faire un script qui lit le fichier et génère les requêtes. Je ne connais pas d'autre moyen [:proy]  
Tu peux optimiser en construisant des requêtes qui insèrent plsusieurs (une dizaine ou une vingtaine généralement) enregistrements d'un coup :)


Message édité par mrbebert le 06-04-2004 à 20:24:33
Reply

Marsh Posté le 06-04-2004 à 20:35:47    

mrbebert a écrit :

Je pense qu'il faut faire un script qui lit le fichier et génère les requêtes. Je ne connais pas d'autre moyen [:proy]  
Tu peux optimiser en construisant des requêtes qui insèrent plsusieurs (une dizaine ou une vingtaine généralement) enregistrements d'un coup :)


Je vais voir la source de PhpMyAdmin au niveau du traitement du fichier CVS mais c'est en php  :cry:
Pis si y avait la fonction recherche activée ça m'aiderait  :pfff:


Message édité par pc2000 le 06-04-2004 à 20:36:46
Reply

Marsh Posté le 06-04-2004 à 20:37:35    

PHP, c'est pas très compliqué à comprendre :)  
(sauf quand il y a des include dans tous les sens, certes :pt1cable: )

Reply

Marsh Posté le 06-04-2004 à 20:47:05    

mrbebert a écrit :

PHP, c'est pas très compliqué à comprendre :)  
(sauf quand il y a des include dans tous les sens, certes :pt1cable: )


Je connais très bien PHP mais bon ASP.NET c'est pas vraiment la même façon de programmtion même si c'est le même algo.
Quelqu'un ne connaitrait pas un script déjà existant en ASP.NET pour récupérer générer des requêtes à partir un fichier CVS ?

Reply

Marsh Posté le 07-04-2004 à 13:38:16    

Bonjour,
 
Il y a les lots DTS qui permettent d'importer ou exporter des données vers ou de SQL SERVER.
Donc pour ton problème, c'est ce que je ferais. L'aide de SQL SERVER est assez succinte sur les lots DTS (sauf pour l'aide sur dtsrun). je te conseille d'aller sur www.dbforums.com si tu comprends l'anglais.
Petit conseil : ne fait pas les lots DTS via l'assistant mais directement sous SQL Server Enterprise Manager / Serveur / Data transformation Service.
 
Question : Quelle est ta version de SQL SERVER ?
 
PS : Comme c'est le serveur qui travaille, la vitesse d'exécution est stupéfiante.

Reply

Marsh Posté le 07-04-2004 à 13:55:46    

Tout à fait le lot DTS et le plus approprié...
il permet l'automatisation...

Reply

Marsh Posté le 07-04-2004 à 14:20:14    

bulk insert

Reply

Marsh Posté le 07-04-2004 à 15:15:08    

mrbebert a écrit :

Je pense qu'il faut faire un script qui lit le fichier et génère les requêtes. Je ne connais pas d'autre moyen [:proy]  
Tu peux optimiser en construisant des requêtes qui insèrent plsusieurs (une dizaine ou une vingtaine généralement) enregistrements d'un coup :)


 
je fais que passer mais euh comment faire des requtes qui insèrent plusieurs enregistrement d'un coup?  :)

Reply

Marsh Posté le 07-04-2004 à 17:43:23    

saxgard a écrit :


 
je fais que passer mais euh comment faire des requtes qui insèrent plusieurs enregistrement d'un coup?  :)  

Après le VALUES, on peut mettre les valeurs de plusieurs lignes :
INSERT INTO table VALUES(1, 'valeur1', 0, 0), (2, 'valeur2', 0,0), (3, 'valeur3', 0,0);
L'avantage, c'est que c'est plus rapide de faire 1 requête insérant 3 enregistrements, que 3 requêtes insérant chacune 1 seule ligne.
 
Bon, je pense pas qu'on puisse mettre trop de champs à la suite non plus, mais 10 par 10 ou 20 par 20, c'est déjà nettement mieux :)  
(100 requêtes au lieu de 1000 pour insérer 1000 lignes, c'est pas négligeable)
 
edit : ca marche avec mysql, mais je pense que c'est une syntaxe générale [:figti]


Message édité par mrbebert le 07-04-2004 à 17:44:54
Reply

Marsh Posté le 07-04-2004 à 17:43:23   

Reply

Marsh Posté le 07-04-2004 à 17:47:22    

si tu peux mettre le fichier CSV sur le serveur hébergeant la base de données :
 

Code :
  1. bulk insert TABLE from 'chemin\fichier' with
  2. (
  3. rowterminator = '\r\n', -- a priori si c'est un fichier WIN
  4. fieldterminator = ';'
  5. )


 
sinon par bcp, avec un fichier de format qui va bien

Reply

Marsh Posté le 07-04-2004 à 19:15:04    

diode a écrit :

Bonjour,
 
Il y a les lots DTS qui permettent d'importer ou exporter des données vers ou de SQL SERVER.
Donc pour ton problème, c'est ce que je ferais. L'aide de SQL SERVER est assez succinte sur les lots DTS (sauf pour l'aide sur dtsrun). je te conseille d'aller sur www.dbforums.com si tu comprends l'anglais.
Petit conseil : ne fait pas les lots DTS via l'assistant mais directement sous SQL Server Enterprise Manager / Serveur / Data transformation Service.
 
Question : Quelle est ta version de SQL SERVER ?
 
PS : Comme c'est le serveur qui travaille, la vitesse d'exécution est stupéfiante.


 
Il s'agit de SQL SERVER 2000.
En effet dans Enterprise Manager on peut très bien importer toutes sortes de données (textes, Excel, Access...) et ça a très bien marché.
Je vais me renseigner un peu sur les lots DTS pour l'automatisation.
Merci à tous,
 
A+


Message édité par pc2000 le 07-04-2004 à 19:19:46
Reply

Marsh Posté le 07-04-2004 à 20:30:06    

L'avantage avec 2000 (par rapport à SQL SERVER 7), c'est le passage de paramètre sur les lots DTS (genre si ton fichier à un nom différent à chaque fois, avec la date par exemple...)
Bon courage

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed