Det enda gångbara sättet att göra detta är att använda INT IDENTITY
som SQL Server-databasen erbjuder. Lita på mig om det här - du gör det inte vill försöka göra detta på egen hand!
Använd bara
CREATE TABLE dbo.YourTableOne(ID INT IDENTITY(1,1), ...other columns...)
och vara färdig med det.
När du har infogat en rad i din första tabell kan du hämta värdet för identitetskolumnen så här:
-- do the insert into the first table
INSERT INTO dbo.YourTableOne(Col1, Col2, ...., ColN)
VALUES (Val1, Val2, ...., ValN)
DECLARE @NewID INT
-- get the newly inserted ID for future use
SELECT @NewID = SCOPE_IDENTITY()
-- insert into the second table, use first table's new ID for your FK column
INSERT INTO dbo.YourTableTwo (FKColumn, ......) VALUES(@NewID, ......)
Uppdatering: om du behöver infoga flera rader i den första tabellen och fånga flera genererade ID
värden, använd OUTPUT
klausul:
-- declare a table variable to hold the data
DECLARE @InsertedData TABLE (NewID INT, ...some other columns as needed......)
-- do the insert into the first table
INSERT INTO dbo.YourTableOne(Col1, Col2, ...., ColN)
OUTPUT Inserted.ID, Inserted.Col1, ..., Inserted.ColN INTO @InsertedData(NewID, Col1, ..., ColN)
VALUES (Val1, Val2, ...., ValN)
och sedan gå därifrån. Du kan hämta vilka värden som helst från de nyligen infogade raderna i den temporära tabellvariabeln, som sedan låter dig bestämma vilka nya ID-värden som ska användas för vilka rader för din andra tabell