Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Αναβάθμιση πίνακα βάσης SQL από αρχείο txt

Îåêßíçóå áðü ôï ìÝëïò berta. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 27-07-2009, 10:05. Υπάρχουν 5 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  26-07-2009, 11:28 52791

    Αναβάθμιση πίνακα βάσης SQL από αρχείο txt

    Έχουμε ένα αρχείο txt (delimited, τα δεδομένα χωρίζονται μεταξύ τους με κόμμα [,] π.χ. file.txt όπου έχουμε δεδομένα ανά γραμμή που αντιστοιχούν σε δύο πεδία ενός πίνακα π.χ. meli μιας βάσης δεδομένων π.χ. basi

    Για παράδειγμα το αρχείο file.txt έχει τις εξής γραμμές :

    1,200
    2,15000
    3,300
    200,500
    κ.λ.π.

    Η πρώτη στήλη αντιστοιχεί στο ID του πίνακα meli της βάσης (μοναδικός κωδικός) και η δεύτερη στήλη αντιστοιχεί στο πεδίο xreosi του πίνακα meli της βάσης.
    θέλω να ενημερώσω το πεδίο xreosi του πίνακα meli της βάσης, μαζικά διαβάζοντας τα δεδομένα από το αρχείο file.txt, ελέγχοντας ο κωδικός της πρώτης στήλης του αρχείου να αντιστοιχεί στο id του πίνακα meli

    Αν ήταν μόνο μια εγγραφή θα έγραφα :

    update basi.meli SET meli.xreosi = 200 WHERE meli.ID = 1
    τώρα που έχουμε πολλές εγγραφές πως θα ανοίξω το αρχείο file.txt να διαβάσω γραμμή γραμμή και ταυτόχρονα να ενημερωνω το πίνακα ;

    Ευχαριστώ εκ των προτέρων

  •  26-07-2009, 11:50 52793 σε απάντηση της 52791

    Απ: Αναβάθμιση πίνακα βάσης SQL από αρχείο txt

    Ένας εύκολος τρόπος για να κάνεις την ενημέρωση του πίνακα είναι να εισάγεις το αρχείο κειμένου στο excel και μετά να κάνεις Import το excel στον SQL σε έναν καινούριο πίνακα. Μετά απλά θα κάνεις ένα update που με where θα βλέπει το id από τον πίνακα που έκανες εισαγωγή και θα ενημερώνεις τον πίνακα σου. Αφού το κάνεις, σβήσε τον πίνακα που έκανες import και είσαι έτοιμος.


    Iraklis Karagkiozoglou
  •  26-07-2009, 12:13 52794 σε απάντηση της 52791

    Απ: Αναβάθμιση πίνακα βάσης SQL από αρχείο txt

    Ένας τρόπος για να το κάνεις μέσω TRANSACT SQL είναι ο παρακάτω.

    Δημιούργησε έναν πίνακα αντίγραφο του πίνακα που θέλεις να κάνεις update π.χ. meli_mirror
    CREATE TABLE meli_mirror
    		(
    		 ID int,
    		 XREOSI float
    		)
    
    Κατόπιν μπορείς να κάνεις εισαγωγή το text αρχείο σου (file.txt) με BULK INSERT στόν πίνακα meli_mirror. 
    Προσοχή πρίν από την εισαγωγή στόν πίνακα meli_mirror πρώτα πρέπει να το καθαρίσεις.
     
     --Καθαρισμός πίνακα
      truncate table meli_mirror
      GO
     ---Εισαγωγή στόν πίνακα αντίγραφό
      BULK INSERT meli_mirror
       FROM 'C:\file.txt'
       WITH 
          (
             FIELDTERMINATOR =',',
             ROWTERMINATOR ='\n'
          ) 
     GO
     ---Update από τον πίνακα αντίγραφο στό πίνακα της βάσης που θέλουμε να ενημερώσουμε.
      update meli set meli.xreosi=b.xreosi from  meli_mirror b
      where meli.ID=b.ID 
     GO
    ---Έλεγχος και εισαγωγή εγγραφών που υπάρχουν στον mirror και δέν υπάρχουν στον πίνακα της βάσης που θέλουμε να ενημερώσουμε.
    
    insert into  meli
    select ID,XREOSI from  meli_mirror where not exists (select * from meli where meli.ID=meli_mirror.ID) 
    
    
     

    Ιωάννης Μανουσάκης
  •  27-07-2009, 08:34 52798 σε απάντηση της 52794

    Απ: Αναβάθμιση πίνακα βάσης SQL από αρχείο txt

    Υπάρχει και η μπακαλίστικη μέθοδος όπου τραβάς το txt σε μια βάση της Access ,κάνεις τις  αλλαγές/διορθώσεις που χρειάζεσαι και το στέλνεις στον SQL.

  •  27-07-2009, 09:32 52799 σε απάντηση της 52798

    Απ: Αναβάθμιση πίνακα βάσης SQL από αρχείο txt

  •  27-07-2009, 10:05 52800 σε απάντηση της 52798

    Απ: Αναβάθμιση πίνακα βάσης SQL από αρχείο txt

    masteripper:

    Υπάρχει και η μπακαλίστικη μέθοδος όπου τραβάς το txt σε μια βάση της Access ,κάνεις τις  αλλαγές/διορθώσεις που χρειάζεσαι και το στέλνεις στον SQL.

    Επειδή όμως εδώ προσπαθούμε να αποφύγουμε τις μπακαλίστικες μεθόδους, καλό είναι να μην χρησιμοποιούμε ούτε το Excel ούτε την Access για να κάνουμε μία δουλειά την οποία μπορεί να κάνει άνετα οποιαδήποτε βάση δεδομένων. Μπορεί να φαίνεται ότι η "μπακαλίστικη" μέθοδος με το Excel ή την Access είναι εύκολη όταν το κάνουμε σαν άσκηση, είναι όμως εντελώς ακατάλληλα για οποιαδήποτε άλλη χρήση.

    Μην ξεχνάμε ότι οι εισαγωγές από txt δεν είναι ποτέ one off. Πρέπει να γίνονται περιοδικά, συχνά καθημερινά, για να ανεβάσουμε στοιχεία από ένα σύστημα και να τα περάσουμε σε άλλο. Γι αυτό υπάρχει το BULK INSERT, για να ανέβουν γρήγορα τα δεδομένα σε ένα προσωρινό πίνακα. Μετά εκτελούμε τα Update, Insert που θέλουμε για να περάσουμε τα δεδομένα στη μορφή που θέλουμε, στους πίνακες που θέλουμε.

    Ως τώρα έχουν αναφερθεί δύο πρακτικοί τρόποι γι αυτό το INSERT

    • Το BULK INSERT που πρότεινε ο imanos, το οποίο χρησιμοποιείται κατά κόρον όταν θέλουμε να φορτώσουμε δεδομένα απευθείας στη βάση.
    • Ένα ενδιάμεσο πρόγραμμα όπως πρότεινε ο gtas, το οποίο θα διαβάσει στοιχεία από διάφορα συστήματα και θα τα περάσει στη βάση. Αυτό χρειάζεται συνήθως όταν δεν μπορούμε να βρούμε εύκολα ένα αρχείο txt σε αναγνώσιμη μορφή (θυμάται κανείς το EBCDIC? Κι όμως υπάρχει στα AS/400!).

    Να προσθέσω κι εγώ τα SQL Server Integration Services τα οποία μπορούν να κάνουν ό,τι και το ενδιάμεσο πρόγραμμα χωρίς όμως να βγαίνει κανείς από τον SQL Server.

    Η γρηγορότερη μέθοδος πάντως είναι το BULK INSERT, μετά από το οποίο μπορούμε να χρησιμοποιήσουμε SQL απευθείας στα δεδομένα μας και να πετύχουμε αυτό που θέλουμε ευκολότερα και με μεγάλη ταχύτητα.

     

    Υ.Γ. Αν μιλάμε για SQL Server 2008 θα βοηθήσει φοβερά η εντολή MERGE, με την οποία μπορεί κανείς να κάνει update τις υπάρχουσες εγγραφές και Insert τις νέες, με μία μόνο εντολή.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems