L'unico modo praticabile per farlo è usare INT IDENTITY
che offre il database di SQL Server. Fidati di me su questo - tu non voglio provare a farlo da solo!
Basta usare
CREATE TABLE dbo.YourTableOne(ID INT IDENTITY(1,1), ...other columns...)
e falla finita.
Dopo aver inserito una riga nella prima tabella, puoi recuperare il valore della colonna identità in questo modo:
-- 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, ......)
Aggiornamento: se è necessario inserire più righe nella prima tabella e acquisire più ID
generati valori, utilizzare il OUTPUT
clausola:
-- 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)
e poi vai da lì. Puoi ottenere qualsiasi valore dalle righe appena inserite nella variabile della tabella temporanea, che ti consentirà quindi di decidere quali nuovi valori ID utilizzare per quali righe per la tua seconda tabella