Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
932 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  insertion entre deux tables

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

insertion entre deux tables

n°1800397
zghida
Posté le 15-10-2008 à 12:08:53  profilanswer
 

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!

mood
Publicité
Posté le 15-10-2008 à 12:08:53  profilanswer
 

n°1800502
jielbi
Posté le 15-10-2008 à 15:07:48  profilanswer
 

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
n°1800568
zghida
Posté le 15-10-2008 à 16:24:14  profilanswer
 

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

n°1800578
zghida
Posté le 15-10-2008 à 16:36:24  profilanswer
 

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).

n°1800629
jielbi
Posté le 15-10-2008 à 17:12:43  profilanswer
 

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
n°1800653
zghida
Posté le 15-10-2008 à 17:37:32  profilanswer
 

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 !!

n°1800959
MagicBuzz
Posté le 16-10-2008 à 12:31:23  profilanswer
 

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...

n°1800978
zghida
Posté le 16-10-2008 à 13:27:22  profilanswer
 

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é

n°1801003
MagicBuzz
Posté le 16-10-2008 à 14:14:01  profilanswer
 

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...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  insertion entre deux tables

 

Sujets relatifs
Insertion d'image : quels sont les attributs recommandés ?Insertion d'une inscription en ligne???
Problème d'insertion dans une table via une interface Visual C++Soustraction entre tables de deux bases différentes.
problème de contrainte Check à deux tables:MYSQL : Créer plusieurs vues ou plusieurs tables ?
Bug d'insertion bdd[PHP MYSQL]Jointures de tables
hauteur d'un tableau et insertion d'iframeInsertion de lignes différentes dans plusieurs tables
Plus de sujets relatifs à : insertion entre deux tables


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR