INSERT INTO tabell(fält...)
SELECT fält... FROM tabell WHERE villkor
Varje gång en insert görs vill jag ifall en post är av ett visst slag göra in insert i en annan tabell och då vill jag veta @@IDENTITY från insert'en enligt ovan.
Jag vill helst göra detta med ren SQL direkt i MSSQL.
OveRRide: Jag vet inte riktigt vad du menar med last_inserted_id, men det var väl till MYSQL och inte MSSQL?
Problemet är att jag vill göra en "bulk insert" (tror jag..), alltså många rader genom att ställa en select-fråga. Radernas @@IDENTITY vill jag ha tag i, inte bara den sista utan alla raders identity.
@nders, jag skulle gärna vilja göra som du sa, jag tror du menar så här:
INSERT INTO ELement(dbId,eleVarde,eleTypId)
SELECT 40,eleVarde, eleTypId
FROM Element
WHERE dbId=39
AND eleTypId=4
INSERT INTO ElementTabell(eleId,artNr,pris)
SELECT @@IDENTITY,artNr,pris
FROM ElementTabell et,Element e
WHERE e.eleId=@@IDENTITY
AND e.eleTypId=4
Problemet är att jag bara får med den sista insertade radens IDENTITY, i mitt fall handlar det om att jag i första INSERT (ovan) har 7 olika rader (7 olika IDENTITY). I den andra INSERT så har jag bara IDENTITY från den sista raden i första INSERT. Koden ovan ger fel resultat.
declare @myID int
INSERT INTO ELement(dbId,eleVarde,eleTypId)
SELECT 40,eleVarde, eleTypId
FROM Element
WHERE dbId=39
AND eleTypId=4
select @myID = @@identity
INSERT INTO ElementTabell(eleId,artNr,pris)
SELECT @myID,artNr,pris
FROM ElementTabell et,Element e
WHERE e.eleId=@myID
AND e.eleTypId=4
Använd @myID istället, och sätt om det om du vill ha ett annat räknarvärde. Inte helt med på allt dock... :OO
INSERT INTO ELement(dbId,eleVarde,eleTypId)
SELECT 40,eleVarde, eleTypId
FROM Element
WHERE dbId=39
AND eleTypId=4
...tar fram sju rader ur Element och sätter nytt dbId (40) och sen görs INSERT i tabellen Element (en slags kopiering).
Följande kod ska använda @@identity från alla rader ovan (7 olika identity) för att göra INSERT i tabellen ElementTabell....
select @myID = @@identity
INSERT INTO ElementTabell(eleId,artNr,pris)
SELECT @myID,artNr,pris
FROM ElementTabell et,Element e
WHERE e.eleId=@myID
AND e.eleTypId=4
... Detta betyder att alla rader som väljs ut från SELECT inte ska ha samma eleId (@myID), utan IDENTITY från respektive rad från den först koden ovan.
Jag vet inte om jag kan förklara det på något annat sätt. Du kanske kan berätta vad du inte förstår.
Med den förklaringen förstår jag, men jag kan inte se att du kan göra det med en sådan SQL-fråga. Din insert får bara lägga till en post i taget om du ska kunna använda @@identity.
Alltså behöver du då någon loop, antingen i en stored procedure, eller mha något scriptspråk eller annan applikation.