Avatar billede mungojerrie Nybegynder
22. marts 2004 - 14:14 Der er 7 kommentarer og
2 løsninger

sikker metode til at returnere det nye id efter insert

Hej

Jeg har læst flere spg herinde ang mit spg, men synes ikke rigtigt at der er et entydigt svar.

Jeg har dog fundet ud af at det kan være godt at benytte en stored procedure til at lave insert'en og returnere mit nye id.
Dog er jeg lidt i tvivl om at en transaction kan klare opgaven.

begin trans
insert into min_tabel .......
select ident_current('min_tabel')
commit trans

Vil dette med sikkerhed altid give mig den id der er skabt med min insert ?
Avatar billede bennytordrup Nybegynder
22. marts 2004 - 14:25 #1
Jeg ville i det tilfælde bruge scope_identity uden transaction
Avatar billede mungojerrie Nybegynder
22. marts 2004 - 14:38 #2
så du vil bare skrive :

insert into min_tabel .......
select @@scope_identity

????
Avatar billede bennytordrup Nybegynder
22. marts 2004 - 14:41 #3
ja, bortset fra, at korrekt syntax er:

insert into min_tabel .....
select scope_identity()
Avatar billede bennytordrup Nybegynder
22. marts 2004 - 14:43 #4
Med ident_current risikerer du at få et forkert id, hvis andre laver inserts også til samme tabel.

Om den problemstilling kan løses vis transaction og låsning, ved jeg ikke.

Du skal bare være opmærksom på, at du ikke må lave inserts i andre tabeller med identity-felter efter insert af den ID-værdi, du skal have fat i. Hvis du har brug for det, er du nødt til at samle værdien op i en variabel og til slut returnere denne:


declare @MinID int
insert into min_tabel ...
select @MinID = scope_identity()

insert into en_anden_tabel ...


select @MinID
Avatar billede mungojerrie Nybegynder
22. marts 2004 - 14:56 #5
hmm, men det duer vel, hvis jeg nedlægger min connection efter min insert og opretter en ny næste gang jeg skal lave noget på databasen ??
Jeg forventer at scope_identity() er connection afhængig
Avatar billede bennytordrup Nybegynder
22. marts 2004 - 15:38 #6
Din connection bliver først lukket efter, din stored procedure er færdig og har returneret sine ting.
Avatar billede mungojerrie Nybegynder
22. marts 2004 - 15:54 #7
hmm, jeg har nu ikke i sinde at lave nogen stored procedure til formålet.....og jeg bestemmer vel selv hvornår min connection bliver lukket ?!
Avatar billede bennytordrup Nybegynder
22. marts 2004 - 15:55 #8
IMHO bør du gøre det - hvordan ville du ellers styre scope på forespørgslen?
Avatar billede mungojerrie Nybegynder
22. marts 2004 - 15:57 #9
scope bliver vel styret af min sql connection.....
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