Единственият жизнеспособен начин за да направите това е да използвате INT IDENTITY
които базата данни на SQL Server предлага. Доверете ми се за това - вие не искате да опитате да направите това сами!
Просто използвайте
CREATE TABLE dbo.YourTableOne(ID INT IDENTITY(1,1), ...other columns...)
и приключете с него.
След като вмъкнете ред в първата си таблица, можете да извлечете стойността на колоната за идентичност по този начин:
-- 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, ......)
Актуализация: ако трябва да вмъкнете множество редове в първата таблица и да заснемете множество генерирани ID
стойности, използвайте OUTPUT
клауза:
-- 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)
и след това отидете от там. Можете да получите всякакви стойности от нововмъкнатите редове във временната променлива на таблицата, която след това ще ви позволи да решите кои нови стойности на ID да използвате за кои редове за вашата втора таблица