Avatar billede johnfs Nybegynder
23. maj 2002 - 11:59 Der er 11 kommentarer og
1 løsning

HJÆLP!!! Splitte en record fra en tabel til anden tabel

Er der nogen der ved eller har oplysninger om, hvordan man løser følgende problem.
Jeg får lagt nogle komma adskilte record ind på min MS SQL server i en bestemt tabel. Denne tabel har kun en kolonne. Disse record skal så kopieres over i en anden tabel med flere kolonner.

Den komma adskilte tabel record med en kolonne:
Felt1
”3125220”,”3”,”3331”,”Ordre 365243”
”3125221”,”3”,”4537”,”Ordre 365244”

Tabellen som der skal modtage filen med fire kolonner:
Felt1    Felt2    Felt3    Felt3
3125220    3    3331    Ordre 365243
3125221    3    4537    Ordre 365244
Avatar billede slash Nybegynder
23. maj 2002 - 12:02 #1
kan du ikke klare det med DTS?
Avatar billede stig3 Mester
23. maj 2002 - 12:04 #2
Måske ville det være en ide at lave en trigger.....
Avatar billede johnfs Nybegynder
23. maj 2002 - 12:10 #3
Da jeg ikke har den store erfaring med SQL server, ville det være en stor hjælp om nogen kunne forklare hvordan man gør, eller oplyse mig om hvor jeg kunne få oplysninger om hvordan.
Avatar billede slash Nybegynder
23. maj 2002 - 12:12 #4
hvis vi taler DTS er der en wizard i Enterprise manageren! Stil dig på den tabel du vil importere til, højreklik, vælg "all tasks", og vælg dernæst import data - en wizard starter dernæst - følg den og tilpas den til dit dataformat
Avatar billede slash Nybegynder
23. maj 2002 - 12:13 #5
umiddelbart ville jeg vælge at lave en DTS pakke som importerer direkte fra din .txt fil over i den endelige tabel (den med det korrekte antal kolonner!!).
Avatar billede terry Ekspert
23. maj 2002 - 12:16 #6
I have a solution on the way, just give me 5!
Avatar billede johnfs Nybegynder
23. maj 2002 - 12:23 #7
De komma adskilte filer bliver automatisk lagt op i tabellen på SQL-serveren, derfor er der kun mulighed for at hente dataerne med de komma adskilte records fra denne tabel på SQL-serveren.
Avatar billede terry Ekspert
23. maj 2002 - 12:24 #8
INSERT INTO fourcols
SELECT SUBSTRING(fld1, 2,7), SUBSTRING(fld1, 12,1), SUBSTRING(fld1, 16,4), SUBSTRING(fld1, 23,12) FROM onecol

FourCols is the name of the table containing four columns
onecol is the table containing ONE column

You may need to adjust the substring start and length paramaters but its about right!
Avatar billede slash Nybegynder
23. maj 2002 - 12:35 #9
hvis der køres med "statiske" længder på dine data - hvis fx. felt 1 altid vil indeholde 7 tegn etc., så er terry's løsning OK. Men hvad så i den situation hvor længden på felterne varierer fra gang til gang - så er der ikke meget dynamik i terry's løsning!
Avatar billede terry Ekspert
23. maj 2002 - 12:44 #10
thats right slash> I am assuming that it is fixed lengths!
Avatar billede slash Nybegynder
23. maj 2002 - 13:04 #11
du kan oxo bruge denne stump kode som inspiration til dynamisk batching:
declare @firstpos int
declare @nextpos int
declare @result varchar(10)
select @firstpos = charindex('"', dato, 0) FROM test WHERE id = 1
select @nextpos = charindex('"', dato, @firstpos+1) from test where id = 1
select @result = substring(dato,@firstpos+1,@nextpos-@firstpos-1) from test where id = 1
print @result

når du har det hele til køre med én record smider du det bare i en cursor eller en while løkke ;-)
Avatar billede johnfs Nybegynder
23. maj 2002 - 16:37 #12
Det virker - Da det er anden gang i dag vil du komme med i min aftenbøn. Tusind tak til terry, slash og i andre for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester