insertion entre deux tables - SQL/NoSQL - Programmation
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
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
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).
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...
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 !!
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...
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é
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...
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!