FAQ |
Kalender |
![]() |
#1 | |||
|
||||
Nykomling
|
Hej
Jag har en massa data som jag ska lägga in i en sql server databas. Finns det något bra sätt så att man slipper lägga in en rad i taget. Jag lägger in den i designvy genom sql server men kan också genom INSERT utryck lägga in men bara en åt gången... gäller sql 2005 tips?? |
|||
![]() |
![]() |
![]() |
#2 | |||
|
||||
Klarade millennium-buggen
|
Import?
|
|||
![]() |
![]() |
![]() |
#3 | |||
|
||||
Flitig postare
|
det finns en del sätt, frågan är bara vart din källdata kommer ifrån, tabseparerad fil, excel, annan databas, annan tabell i samma databas etc?
|
|||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Flitig postare
|
Nu kommer jag från MySQL sidan av SQL men det kanske kan hjälpa dig endå.
När jag ska lägga in mycket data åt gången så brukar jag använda detta SQL uttrycket: INSERT INTO `tabell` (`key`, `value`) VALUES (`key1`, `value1`),(`key2`, `value2`),...,...; Innan du kör detta uttrycket så kan du låsa tabellen, tabell, genom att köra: LOCK TABLE `tabell` WRITE Sedan kan du också passa på att avaktivera indexering medans du kör importen: ALTER TABLE `tabell` DISABLE KEYS Så formulan är alltså: LOCK TABLE `tabell` ALTER TABLE `tabell` DISABLE KEYS INSERT INTO `tabell` (`key`, `value`) VALUES (`key1`, `value1`),(`key2`, `value2`),...,...; UNLOCK TABLE `tabell` ALTER TABLE `tabell` ENABLE KEYS Den sista queryn kommer att ta lite tid om du redan har mycket data i tabellen eftersom hela tabellen måste omindexeras |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Supermoderator
|
Som påpekats innan så är det omöjligt att ge ett relevant svar utan att veta vad det är för typ av källa...
__________________
Full-stack developer, free for smaller assignments |
||
![]() |
![]() |
![]() |
#6 | |||
|
||||
Nykomling
|
Jag har det listat i ett mail det som skall in.....det är ju flera hundra rader med Namn på fåglar... det jag vill undika är o slippa kopiera en rad i taget o klistra in per rad i databasen utan kopiera allt o pasta in o allt hamnar på egen rad i databasen...gör jag insert måste jag ändå kopiera in allt en efter en..
Jag har 3 kolumer i en tabell med svenska engeka o latinska namn på fåglar... det är några humdra rader som skall in... ![]() |
|||
![]() |
![]() |
![]() |
#7 | |||
|
||||
Mycket flitig postare
|
Citat:
För detta behöver man förstås se exakt hur textfilen i mejlet ser ut och hur databasen är uppbyggd. (Och dessutom ha någon aning om regexp:ar och valfritt skriptspråk...) (Det här kanske inte hjälper dig direkt men det är ungefär så man brukar göra - det finns säkert någon som här som hjälper dig vidare.) |
|||
![]() |
![]() |
![]() |
#8 | |||
|
||||
Flitig postare
|
Då ska du använda bcp-verktyget eller kommandot BULK INSERT i query analyzer. Det kan se ut typ såhär:
bcp databasename..tablename in textfile.dat -c -t , -r \n -Sservername -Usa -Ppassword -t växlen anger vilken fältterminator och -r radterminator. I mitt exempel är fälten avgränsade med ett kommatecken och varje rad med ett enter. Annars kan du köra BULK INSERT, då ser det ut så här: BULK INSERT databasename..tablename FROM 'c:\textfile.dat' WITH ( DATAFILETYPE = 'char', FIELDTERMINATOR = ',', ROWTERMINATOR = '\n' ) Hoppas svaret hjälper mer än det stjälper ![]() Edit: Vill bara poängtera att bcp körs som ett program i kommandoprompten och inte i query analyzern, det kanske inte framgick av min text. |
|||
![]() |
![]() |
![]() |
#9 | ||
|
|||
Har WN som tidsfördriv
|
1. Kolla kolumnordningen i den tabell som det ska in i
2. Kopiera ut det från mailet, klistra in i excel 3. Flytta runt kolumnerna i excel så de stämmer med databasen 4. Markera hela dataområdet i excel 5. Ctrl + C 6. Markera hela första raden i tabellen i databasen (klicka på fyrkanten med en pil eller vad det nu är för ikon) 7. Ctrl + V Det tar lite tid att få in datat på det här sättet, men du slipper hacka script |
||
![]() |
![]() |
![]() |
#10 | ||
|
|||
Klarade millennium-buggen
|
De flesta SQL-frontends har väl en funktion för att läsa in textfiler.
Bara textfilen är formaterad ordentligt så går det bra. tänk på: Rätt teckenkodning. En rad per rad. Skiljetecken mellan fälten, till exempel ; Avgränsa teckenfält med "" Escapa läskiga tecken med \ Rätt antal fält per rad och i rätt ordning Kör! |
||
![]() |
![]() |
Svara |
|
|