Προς το περιεχόμενο

SQL Server Insert απο txt


bnvdarklord

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα

 

Εχουμε μια εργασία στον SQL Server, και πρεπει να κανουμε insert τα δεδομενα για την βαση που χρειάζεται απο ενα txt αρχείο. Εψαξα στο internet και βρήκα την BULK INSERT. Το θεμα ειναι οτι τα αρχεία txt που μας εχουν δώσει περιέχουν στοιχεία απο περισσοτερους απο εναν πινακες.

 

Παραδειγμα

Πινακες:

Α(col1, col2, col3)

B(col1 references col1(A), col4, col5)

 

Το αρχειο περιέχει τα εξής

col1, col2, col3, col4, col5

 

Πως γινεται το insert σε αυτην την περιπτωση;

Δημοσ.

Δηλαδή το txt αρχείο περιέχει το αποτέλεσμα ενός join των δύο πινάκων πάνω στο πεδίο col1; Δεν γνωρίζω αν υπάρχει κάποιος τρόπος να γίνει αυτόματα, αλλά αυτό που θα έκανα είναι να φορτώσω το txt αρχείο δύο φορές (μία για κάθε πίνακα) και μετά αφού σβήσω τις περιττές columns από κάθε πίνακα να κάνω remove όλα τα duplicate rows.

Δημοσ.

Μπορείς να κάνεις BULK INSERT σε ένα πίνακα C και μετά να τραβήξεις τα πεδία που θες με

 

INSERT INTO A (col1, col2, col3)

select col1, col2, col3 FROM C;

 

INSERT INTO B (col1, col4, col5)

select col1, col4, col5 FROM C;

 

κάνε και ένα DROP TABLE C και είσαι κομπλέ.

Δημοσ.

Σωστή η πρόταση του mvaggel, αλλά μπορεί να έχεις διπλοεγγραφές στους πίνακες A και B. Αν όντως έχεις διπλοεγγραφές, βάλε στα SELECT το DISTINCT (SELECT DISTINCT ...) έτσι ώστε να τις αποφύγεις.

Δημοσ.

Τελικά το bulk δεν εκανε καθως τα strings στο txt δεν ειχαν αυτάκια. Ο καθηγητής μου ειπε να τα βαλω με import αλλα δεν το κατάφερα. Ευτυχως με κατι αλχημίες τύπου find and replace τα εφερα στην μορφή insert into.

 

@_tasos thx δεν θα το σκεφτόμουν.

Δημοσ.

By the way, υπάρχει τρόπος να διαβάσεις data από .txt με τη χρήση του OleDb Provider. Μπορείς δηλαδή να γράψεις SQL και να φορτώσεις τις εγγραφές σε ένα dataset ή datatable. Βέβαια, έχεις μόνο τη δυνατότητα για SELECT αλλά και πάλι μου φαίνεται αρκετά καλός τρόπος για να πάρεις δεδομένα από txt.

 

Αν το χρειάζεσαι, πες μου να σου στείλω κανά δυο links σχετικά.

 

 

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...