Avatar billede jeppebecool Nybegynder
05. december 2004 - 17:13 Der er 16 kommentarer

Sql Insert få last insert id

Hej jeg skal lige høre om i kan forklare hvad forskellen er på

@@IDENTITY, SCOPE_IDENTITY, og IDENT_CURRENT, for jeg ved ikke hvilken en jeg skal bruge.

Jeg vil også gerne vide hvordan man får evt det første eller sidste insert id ved en bulk insert ( og gerne hvordan man laver bulk inserten i første omgang :)

Hilsen Jeppe
Avatar billede arne_v Ekspert
05. december 2004 - 17:18 #1
@@IDENTITY giver sidste auto increment id for connection

SCOPE_IDENTITY() giver sidste auto increment id for connection i current scope

forskellen er at hvis du laver en INSERT som laver en auto increment id og
den table har en insert trigger som laver en ny INSERT som igen laver en auto
increment  id, så vil @@IDENTITY returnere den sidste, mens SCOPE_IDENTITY()
vil returnere den du ønsker (fordi det er den sidste i current scope - trigger
er et nyt scope)

Derfor brug altid SCOPE_IDENTITY() medmindre du kører på en gammel version
af SQLServer hvor der kun er @@IDENTITY
Avatar billede arne_v Ekspert
05. december 2004 - 17:18 #2
IDENT_CURRENT aner jeg ikke hvad er
Avatar billede jeppebecool Nybegynder
05. december 2004 - 17:21 #3
Cool, hvad med bulk insert ... :)
Avatar billede arne_v Ekspert
05. december 2004 - 17:25 #4
Jeg kiggede lidt i docs.

IDENT_CURRENT returnerer den sidste auto increment id for en give tabel uanset connection.
Avatar billede arne_v Ekspert
05. december 2004 - 17:27 #6
BULK INSERT loader en fil med data
Avatar billede arne_v Ekspert
05. december 2004 - 17:28 #8
Svarer til LOAD DATA INFILE i MySQL, hvis du kender den.
Avatar billede jeppebecool Nybegynder
05. december 2004 - 17:35 #9
Nåh , så er det ikke det jeg leder efter. Jeg skal indsætte flere rows i en tabel og bagefter skal jeg kunne trække Identity id'erne ud på dem. I MySql kan man gøre sådan her "insert into <table> values ('A'),('B'),('C');"SELECT LAST_INSERT_ID()" , hvor man så får id'et på den første insert, og så kan man bare selv lægge tal til, for man er sikker på at den er eksekveret i den rækkefølge.

Kan man ikke gøre noget lignende i MS SQL ? eller er man nødt til at indsætte hver row og udtrække SCOPE_IDENTITY() for hver ... altså:

"insert into <table> values ("a"); select SCOPE_IDENTITY()",
"insert into <table> values ("b"); select SCOPE_IDENTITY()",
"insert into <table> values ("c"); select SCOPE_IDENTITY()".

Det virker i hvertfald lidt besværligt.
Avatar billede arne_v Ekspert
05. december 2004 - 17:57 #10
Du er nødt til at gøre det på den måde både i SQLServer og MySQL
(den anden metode er ikke fler bruger sikker !).
Avatar billede jeppebecool Nybegynder
05. december 2004 - 18:42 #11
Ok. tak for hjælpen
Avatar billede arne_v Ekspert
05. december 2004 - 18:49 #12
så vil jeg ligge et svar
Avatar billede jeppebecool Nybegynder
05. december 2004 - 19:46 #13
Accepter knappen virker sgu ikke. Jeg skal nok lige vende tilbage med pointene
Avatar billede arne_v Ekspert
05. december 2004 - 19:48 #14
Har du prøvet at markere mit navn i comboboxen så det bliver blåt inden du klikker
accepter ?
Avatar billede arne_v Ekspert
01. januar 2005 - 13:47 #15
?
Avatar billede jesperkragh Nybegynder
14. september 2005 - 11:44 #16
Du skulle vel ikke være den jeppe der gik på datamatiker uddannelsen i århus
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