Mark S. Rasmussen skrev:
> Så bliver jeg lige nødt til at spørge igen :). Jeg kan godt se
> hvordan det kan klares med en stored procedure.
Så vil jeg anbefale at du laver det på denne måde.
> Men hvis nu man laver en Conn.Execute("Insert blahblahblah"),
> hvordan udfører jeg så select @@identity?
Som Peter skrev - i samme statement.
> Skal jeg hente et ekstra recordset vha ;
Ja.
> og .NextRecordSet,
Det skulle ikke være nødvendigt med .NextRecordSet så længe du bare
kører handlingsforespørgsler.
Prøv med noget i retning af
strSQL = "INSERT INTO foo (f1, f2) VALUES (v1, v2); INSERT INTO
foobar (f3, f4, f5) VALUES (@@IDENTITY, v3, v4);"
Jeg vil tro at det skulle virke, selvom jeg ikke er sikker på
hvordan en eventuel ny identityvalue i foobar håndteres.
De lærebogseksempler jeg har benytter en Stored Procedure og tre
trin (variabeldeklarationen regnes ikke som et trin):
DECLARE @idVar int
INSERT INTO foo (f1, f2) VALUES (v1, v2)
SELECT @idVAR = @@IDENTITY
INSERT INTO foobar (f3, f4, f5) VALUES (@idVar, v3, v4)
> eller skal jeg bare lave en ny Conn.Execute lige efter?
Nej. For SQL-serveren vil det se ud som to helt adskilte
forespørgsler og derfor give mulighed for det problem du beskrev.
Afhængig af hvor mange brugere du har og hvor hurtigt dine
forespørgsler kører kan denne metode (2 på hinanden følgende
conn.execute's) være god nok - men hvis du vil være sikker skal du
gøre noget andet (fx som ovenfor).
--
Jens Gyldenkærne Clausen
MF (medlem af FIDUSO -
www.fiduso.dk)
I ovenstående tekst benyttes nyt komma.