Avatar billede rew Nybegynder
19. november 2009 - 15:39 Der er 10 kommentarer og
1 løsning

SQL Stored Procedures hjælp

Jeg skal have kopieret nogle dele af data fra en tabel i SQL over
i en anden SQL tabel, hvor den bare skal tage hvad der evt. står i de 8 felter i den ene tabel og kopiere dem over i den anden tabel og smide data i de felter jeg peger på.
Er der nogen som kan hjælpe med sådan et stykke SQL kode ?
19. november 2009 - 17:41 #1
Selve den transaktion du beskriver kan klares med en temmelig enkel query.  Den kan man saa putte i en stored procedure eller koere direkte som man her lyst.

Jeg lavede en tabel rew1 med det foelgende indhold:

      felt1  felt2  felt3  felt4  felt5  felt6  felt7  felt8 
      felt11 felt21 felt31 felt41 felt51 felt61 felt71 felt81
      felt12 felt22 felt32 felt42 felt52 felt62 felt72 felt81
      felt13 felt23 felt33 felt43 felt53 felt63 felt73 felt81
      felt14 felt24 felt34 felt44 felt54 felt64 felt74 felt81
      felt15 felt25 felt35 felt45 felt55 felt65 felt75 felt81

Saa ville jeg have den foerste, den tredje, og den femte raekke overfoert til en tilsvarende tabel rew2.  Jeg brugte den foelgende query:

INSERT INTO rew2 (SELECT * FROM rew1 WHERE felt1 IN ('felt11', 'felt13', 'felt15'))

og det gav det foelgende resultat:

      felt1  felt2  felt3  felt4  felt5  felt6  felt7  felt8 
      felt11 felt21 felt31 felt41 felt51 felt61 felt71 felt81
      felt13 felt23 felt33 felt43 felt53 felt63 felt73 felt81
      felt15 felt25 felt35 felt45 felt55 felt65 felt75 felt81
Avatar billede arne_v Ekspert
20. november 2009 - 01:39 #2
Jeg tror at det er:

INSERT INTI nytabel SELECT felt1,felt2,felt3,felt4,felt5,felt6,felt7,felt8 FROM gltabel

der skal bruges.
Avatar billede rew Nybegynder
20. november 2009 - 08:18 #3
INSERT INTI nytabel SELECT felt1,felt2,felt3,felt4,felt5,felt6,felt7,felt8 FROM gltabel

Skal man ikke i denne sætning angive i hvilke felter data skal placeres ?

Den første løsning med alle de felt1...felt81
forstår jeg ikke rigtig.

Jeg har en medlemsdatabase med navn, adresse, tlf, email osv.
som skal kopieres over i en anden database linie for linie og placeres i angivne felter.
Avatar billede arne_v Ekspert
20. november 2009 - 14:54 #4
Jeg antog at der kun var 8 felter i den nye tabel. Er der flere skal du bruge:

INSERT INTI nytabel (a,b,c,d,e,f,g,h) SELECT felt1,felt2,felt3,felt4,felt5,felt6,felt7,felt8 FROM gltabel
Avatar billede arne_v Ekspert
20. november 2009 - 14:54 #5
Og saa er det naturligvis INTO ikke INTI
20. november 2009 - 15:09 #6
rew, jeg sidder med det problem at nogle af de indlaeg der kommer til de spoergsmaal jeg deltager i bliver ikke vist.  Jeg kan se fra oversigten at der er kommet 5 indlaeg til dette spoergsmaal, det sidste kl 14.54, men jeg kan kun se det ene indlaeg jeg selv har lavet.  Kunne jeg bede dig om at gensende resten?
20. november 2009 - 15:17 #7
rew, det er ok, da jeg sendte ovenstaaende blev de andre indlaeg pludselig synlige.

Jeg antog fra det oprindelige spoergsmaal at det var et antal raekker i den gamle tabel der i deres helhed skulle overfoeres.  I saafald virker min kode i min version af mysql (jeg har afproevet den.)  Der er ingen grund til at angive hvilke kolonner der skal kopieres hvis de alle skal.

Hvis det kun er visse kolonner der skal kopieres saa forandrer det sagen.  Jeg skal udbygge og teste kode for det, men det vil vare lidt fordi jeg nu skal vaek.
20. november 2009 - 15:49 #8
Koden der er noedvendig afhaenger naturligvis af hvad man vil.

I alle tilfaelde har jeg fundet ud af at sub-selecten i dette tilfaelde ikke behoever at staa i parantes (tak arne_v).

Saa "case-1:" Det simpleste tilfaelde - den gamle og den nye tabel har de samme kolonner og man vil kopiere alle kolonner.  Saa bliver det

INSERT INTO nytab SELECT * FROM gtabel.  (Hvis man kun vil kopiere visse raekker tilfoeres, for eksempel, WHERE felt1 IN ('felt11', 'felt13' )

"case-2"  Man vil kopiere, lad os sige, fem af kolonnerne i fra den gamle tabel til en ny tabel og den nye tabel faar disse fem kolonner.  Saa bliver det

INSERT INTO rew3 SELECT felt1, felt2, felt3, felt5, felt7 FROM rew1.

"case-3"  Man har en gammel tabel med 8 kolonner.  Fem af disse kolonner skal kopieres til en ny tabel der indeholder mere end fem kolonner.  Saa bliver koden

INSERT INTO rew2(felt1, felt2, felt4, felt5, felt8) SELECT felt2, felt3, felt6, felt7, felt8 FROM rew1
Avatar billede rew Nybegynder
20. november 2009 - 21:26 #9
Jeg tror jeg har fået det til at virke nu, tak for svarene.

Jeg tror det er Christian_Belgien som skal have point, så hvis du smider et svar.....
20. november 2009 - 21:48 #10
Undskyld, jeg er aabenbar noed til at sende et dummy-indlaeg for at kunne laese det sidste indlaeg.
20. november 2009 - 21:49 #11
Her er saa mit svar.
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