A única maneira viável para fazer isso é usar
INT IDENTITY
que o banco de dados SQL Server oferece. Confie em mim - você não quero tentar fazer isso por conta própria! Apenas use
CREATE TABLE dbo.YourTableOne(ID INT IDENTITY(1,1), ...other columns...)
e acabar com isso.
Depois de inserir uma linha em sua primeira tabela, você pode recuperar o valor da coluna de identidade assim:
-- 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, ......)
Atualização: se você precisar inserir várias linhas na primeira tabela e capturar vários
ID
gerados valores, use o OUTPUT
cláusula:-- 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 então vá de lá. Você pode obter quaisquer valores das linhas recém-inseridas na variável de tabela temporária, o que permitirá que você decida quais novos valores de ID usar para quais linhas para sua segunda tabela