Hej, Lite beroende på tillämpning, men varför inte göra en stored procedure som gör det du beskriver? Som en bonus kommer du då få lite rudimentär koll av användarinput (mot t.ex. sql injections). I samma SQL : Nej det ser ut som du använder MSSQL, men om det skulle mot förmodan vara mySQL användar man LAST_INSERT_ID()output inserted
I en asp kod finns följande kod:
Dim SQL
SQL = "INSERT INTO [MyDatabase]"
SQL = SQL & "(column1,column2) "
SQL = SQL & "OUTPUT INSERTED.[MyDatabase-ID] "
SQL = SQL & "VALUES('data1','data2')"
Set RecSet = Connect.Execute(SQL)
Det läggs alltså in en ny rad i tabellen MyDatabase. Fältet MyDatabase-ID är en räknare.
Nu vill jag även lägga in en ny rad i en annan tabell. Och jag vill lägga in samma ID som läggs in i MyDatabase i fältet MyDatabase-ID. Hur får jag tag i detta id igen? Kan jag genomföra detta i samma SQL-sats? Sv: output inserted
Annars tror jag nåt i stil med det här bör kunna funka (har tyvärr inte möjlighet att kunna testa just nu):
INSERT INTO tabell1(kolumn1, kolumn2)
OUTPUT INSERTED.kolumn1, INSERTED.kolumn2, INSERTED.uniktId INTO tabell2
VALUES('hej', 42)
Edit: Ska förstås stå INSERTED och inte tabell1...
Sv: output inserted
men du har ju id't i din RecSet variabel.
Nu kan inte jag asp så bra längre, men kommer man inte åt det med:
RecSet!MyDatabase-ID
Då kör du en insert till, med det värdet.
/mickeSv:output inserted
Conn.Execute("INSERT INTO table1 (ID, fieldname1...) VALUES (NULL, 'value2'...);")
Conn.Execute("INSERT INTO table2 (ID, smfield, table1ID) VALUES (NULL, 'smtext', LAST_INSERT_ID() );")