Avatar billede tbm_iceman Nybegynder
12. juli 2004 - 06:03 Der er 8 kommentarer og
1 løsning

Insert flere rows i samme query

Hej experter!

Hvordan indsætter man flere rows i et insert into. Det skal være i selve queryen.
Kan ikke bruge Bulk insert da mine rækker ikke ligger i en txt fil desuden har jeg heller ikke adgang til at fysisk ligge en fil på database serveren.

//IceMan
Avatar billede dr_chaos Nybegynder
12. juli 2004 - 07:20 #1
du indsætte flere rows med en sql query på denne måde:
INSERT INTO table_name (column1, column2,...)
VALUES (value1, value2,....)
du kan også kigge her:
http://www.w3schools.com/sql/sql_insert.asp
Avatar billede tbm_iceman Nybegynder
12. juli 2004 - 07:23 #2
tror du misforstår mig... jeg ved godt hvordan et insert fungere... jeg vil bare vide hvordan man lave bulk insert i en query, ikke en fil.
Avatar billede arne_v Ekspert
12. juli 2004 - 07:41 #3
Jeg tror at du har 2 muligheder:

1)  brug 1 transaktion og mange INSERT sætninger

2)  lav din egen loader med "bulk copy API" som læser data fra hvor de
    nu er og indsætter dem på ægte bulk copy vis
Avatar billede terry Ekspert
12. juli 2004 - 08:50 #4
INSERT into ..... SELECT ..... FROM
Avatar billede terry Ekspert
12. juli 2004 - 09:04 #5
where is the data you want to insert comming from?
Avatar billede dmk Nybegynder
12. juli 2004 - 12:27 #6
Du kan gøre noget i stil med det her:

create table MyTable (a integer, b integer, c varchar(20))
insert into MyTable (a, b, c)
select * from (
  select 1 a , 1 b, 'somestring' c
  union all
  select 2, 2, 'somestring2'
  union all
  select 3, 3, 'somestring3'
) SubQuery;

Du skal blot huske to ting:
1. Navngiv felterne fra FØRSTE row, da SQLServeren ikke kan selecte noget uden navn i en subquery.
2. Navngiv din subquery, da SQLServeren ikke kan selecte fra noget uden et navn.
Avatar billede tbm_iceman Nybegynder
14. juli 2004 - 08:04 #7
Undskyld det sene svar. Har ikke lige været online siden jeg oprettede spørgsmålet.

Jeg kan ikke bruge SELECT * FROM i min insert da Data'en ikke ligger i nogen tabel.

Jeg har ca 4000 rows der først skal SELECTE's og derefter så skal de enten UPDATES, INSERT INTO eller bare helt glemmes... Hvordan gør man lige det mest hensigtsmæssigt altså så det tager mindst resourcer på SQL+IIS? Jeg har fundet ud af at lave en god løsning når jeg skal selecte dem, der henter jeg dem bare ned i et RS med en cache på 500 records, men det er når jeg skal skrive tilbage til DB, hvis der fx. er lavet en ændring i en af mine rows når den bliver sammenlignet med ekstern-data eller hvis den row ikke findes skal den indsættes. Så det kan let fx. være 500 rows der skal indsættes og 500 der skal updates, hvordan gør man det bedst(MSSQL2000+ASP)?

Den eneste måde indtil videre jeg ser det muligt at gøre det på er med arne_v's metode. Nemlig mange insert sætninger i en transaktion., ala:

INSERT INTO Episode (navn,dato) VALUES ('bla1','mindato1');
INSERT INTO Episode (navn,dato) VALUES ('bla2','mindato2');

Hvis der er en bedre måder at gøre det på må i lige skrive det så får i selvfølgelig pointene, ellers går de til arne_v når har lige opretter et svar.
Avatar billede arne_v Ekspert
14. juli 2004 - 08:20 #8
ok
Avatar billede tbm_iceman Nybegynder
14. juli 2004 - 08:50 #9
Du har ikke en måde jeg kan optimere det på? Så jeg slipper for alle de forespørgsler til SQL serveren?
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