insertion entre deux tables

insertion entre deux tables - SQL/NoSQL - Programmation

Marsh Posté le 15-10-2008 à 12:08:53    

Bonjour,
je suis un peu faible sur SQL serveur, et je veux à partir d'un champ rempli des informations séparé par points vérgules, je veux les ajoutés pour chaque information dans une nouvelle table dans chaque champ correspondant, par exemple :
 
champ de la table source:
al20s#abf ; Acer ; 250 € ; 0,25;8
 
table destination:
Référence | marque | prix ttc | ecotaxe | qte
 
si quelequ'un peut m'aider svp!

Reply

Marsh Posté le 15-10-2008 à 12:08:53   

Reply

Marsh Posté le 15-10-2008 à 15:07:48    

Salut,
 
je suis sûr qu'il existe des solutions plus rapides, mais celle ci fonctionne :
tu enregistres le contenu de ta table source tel quel dans un fichier plat puis tu passes par un bulk insert dans ta table destination :
bulk insert table_destination from 'chemin_du_fichier\nom_fichier' with (fieldterminator=';')
 
Si les champs de ta table ne sont pas dans le meme ordre que dans le fichier plat, il faut les nommer explicitement dans l'insert.
 
Ca reste une solution ponctuelle hein  :o


Message édité par jielbi le 15-10-2008 à 15:29:21
Reply

Marsh Posté le 15-10-2008 à 16:24:14    

Salut,
 
j'ai un fichier xls se regenère quotidiennement
et ce dernier je l'ai passé à partir de la methode openrowset() dans cette table source, qui contient un seul champs avec des informations séparé par points-vérgules
 
si je peut utiliser bulk avec le fichier xls, ça peut bien m'aider a surmonté mon problème

Reply

Marsh Posté le 15-10-2008 à 16:36:24    

BULK INSERT Facturation
FROM 'mon chemain\facture.xls' with (fieldterminator=';')
GO
 
en effet il y a 20 informations séparé par points-vergules sur la colone A du xls, et donc dans la table déstination 20 champs, de col001....col020
 
ça me donne comme erreur :
 
Erreur de conversion de donnes  insrérer en bloc (troncature) pour la ligne 1, colonne 1 (Col001).

Reply

Marsh Posté le 15-10-2008 à 17:12:43    

il me semble que le bulk insert ne fonctionne pas avec un .xls, c'est pour ca que je te proposais de convertir ton fichier.
Sinon, je vois d'autres possibilités :
 
--> exécuter une macro excel de ce genre :  
Sub Macro1()
Selection.TextToColumns Destination:=Range("A1" ), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=True, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
End Sub
qui te découpe ton champ en plusieurs puis passer par la méthode openrowset que tu as déjà testé pour charger la base.
 
-->utiliser les lots DTS (SQL Server 2000) ou Integration Services (SQL Server 2005) pour importer ta source de données Excel
 
-->générer un fichier texte à partir de ton fichier Excel et passer par le bulk insert comme vu précédemment.
 
Au choix selon tes contraintes...


Message édité par jielbi le 15-10-2008 à 17:14:51
Reply

Marsh Posté le 15-10-2008 à 17:37:32    

je te remercie infiniment pour les choix que tu m'as proposé, mais
dans mon cas, je travail sur un serveur , où j'obtient par ftp le xls, et MSOffice n'est pas instalé sur ce serveur, je veux automatiser les démarches
 
et de ce que je connais le DTS n'est pas compatible avec xls !!

Reply

Marsh Posté le 16-10-2008 à 12:31:23    

Bon, y'a quand même un truc qui m'échappe là dedans.
 
Vu la tronche du document Excel, il s'agit d'un document CSV que l'utilisateur n'a pas été foutu de convertir correctement à l'ouverture dans Excel.
 
Alors pourquoi il a choisi d'enregistrer au format Excel ensuite ? Le CSV, SQL Server sait le lire nativement, que ce soit par la méthode que tu as essayé au départ ou par bulk.
 
Là, transformé comme ça en Excel, il ne veut plus rien dire, et sans programmation tu ne pourras JAMAIS le relire.
 
Laisse-le au format CSV...
 
PS : Et essaie donc de l'ouvrir avec le bloc note... C'est lisible dedans ? Parceque je vois gros comme une maison que le fichier a pour extention XLS, mais que c'est bêtement un CSV tout ce qu'il y a de plus classique.
 
En tout cas, tu ne trouveras pas de solution tant que tu essaieras de lire le fichier en tant que document Excel alors que tout est collé dans une seule colonne...

Reply

Marsh Posté le 16-10-2008 à 13:27:22    

justement, y a un contenu CSV, mais la structure est englobé dans un fichier Excel, car lorsque j'ouvre avec bloc note, ou changement d'extension en csv, ça me donne des caractères non reconnu
 
ç'est pour ça j'ai opté pour la recherche d'importer le fichier excel en SQL,
 
on peut par exemple faire un jeu de charindex et substring entre la table source délimité par ; et la table dést avec une boucle while par exemple d'insertion?
j'ai pensé a cette solution mais ça m'as parrait un peu compliqué

Reply

Marsh Posté le 16-10-2008 à 14:14:01    

regarde en amont si tu ne peux pas récupérer le fichier CSV original.
 
parceque justement, à part à grands coups de substring totalement imbittables et immaintenable, tu ne pourras jamais arriver à rien sinon.
 
alors quand on sait que SQL Server sait lire en natif du CSV, c'est vraiment con de se lancer dans une usine à gaz...

Reply

Sujets relatifs:

Leave a Replay

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