Avatar billede stigc Nybegynder
12. december 2002 - 19:38 Der er 8 kommentarer og
2 løsninger

ADO og SQL

Jeg bruger ADO og SQL fra VB sammen med MS sql 7.0 database. Er der en grænse på hvor lang en sql-linine man må sende? Er der en grænse på hvor mange sql'er der må være i en sql sætning (adskilt af semikolon!)?

Hvordan eksekverer man hurtigst f.eks 200 "inserts"? Ved at sende dem i en SQL adskilt af ; ?
Avatar billede pierrehusted Nybegynder
12. december 2002 - 19:50 #1
Sådan her :


Insert into tabelnavn (felter) values (værdier)
go
Insert into tabelnavn (felter) values (værdier)
go
Insert into tabelnavn (felter) values (værdier)


Om der er en grænse på længden af SQL strengen ved jeg ikke.
Avatar billede pierrehusted Nybegynder
12. december 2002 - 19:50 #2
Hvad skal du indsætte med de 200 inserts ??  Er de dannet ud fra en anden tabel?
Avatar billede stigc Nybegynder
12. december 2002 - 19:54 #3
Nej jeg kan desværre ikke lave en "insert into tablename select from..."

Forksellen på "go" og ";" er vel ingenting?
Avatar billede pierrehusted Nybegynder
12. december 2002 - 20:06 #4
Tror ikke der er forskel på GO og ;

GO er vist bare en MS ting.
Avatar billede arne_v Ekspert
12. december 2002 - 22:27 #5
GO er noget MS har "arvet" fra Sybase !
Avatar billede janus_007 Nybegynder
13. december 2002 - 01:32 #6
Der er flere måder at gøre den slags på! Alt afhængig af om vi kun snakker sølle 200 inserts eller 200000 af gangen.
Du kan sende dem i en execute og adsille dem vha. ; , det er den hurtigste måde at skrive det på men ikke den hurtigste måde at indsætte på. Du kan også åbne flere samtidige connections i VB og så evt. lade en connection tage sig af 20% workloadet... Den tredie og absolut hurtigste løsning er at bruge bulk insert - Det er op til dig... jeg vil gerne hjælpe yderligere :O)

ps. mht. max længde på den ; adskilte... hmmm det ved jeg faktisk ikke men jeg har været oppe på 80000 inserts i sådan en fordelt ud på omkring 16 values. Der lå mine umiddelbare tidsmålinger på omkring 200-250 inserts i sekundet, altså forfærdeligt langsomt.
Avatar billede stigc Nybegynder
13. december 2002 - 13:22 #7
Jeg har mødt en grænse for UPDATES på 454! Mærkelig nok...

    For i = 0 To 500
        sql = sql & "UPDATE XXX SET email='" & i & "' WHERE username='stig';"
    Next i
   

efter denne sql er email=454

Hmm.....
Avatar billede janus_007 Nybegynder
13. december 2002 - 13:47 #8
Jeg har lige testet med 1000 - no probs...
Hvad har du deklareret din sql variabel som ?
Hvilke ADO object bruger du ved updaten?

Og husk at svar på mine tidligere spørgsmål :O)
Avatar billede kayb Nybegynder
14. december 2002 - 20:10 #9
Græsnen på en sætning er 4 GB og det burde vel være rigeligt når man tænker på at der er ren tekst ik' ?. Hvor mange SQL'er der i EN sætning er jo lidt af sprøgsmål syntes du ikke? Hvis det er en sætning der forespørger om forskellige ting i et par tabeller eller flere er det vel okay. Men
er det en forespørgsel over mere end 3 tabller begynder det at blive
avanceret.
Avatar billede janus_007 Nybegynder
18. december 2002 - 20:09 #10
hmm jeg kom lige i tanke om, at du måske kunne bruge prepared SQL-statements. De er væsentligt hurtigere end den konventionelle, og reletivt simple at bruge! - Ja du har jo allerede lagt første skridt ved at bruge rs.execute (formoder jeg) *GG*, som netop er beregnet til prepared sql og ikke som den normalt anvendes... men det er en helt anden sniksnak!
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