jedyny realny sposób w tym celu należy użyć INT IDENTITY
oferowane przez bazę danych SQL Server. Zaufaj mi w tej kwestii – nie chcesz spróbować zrobić to sam!
Wystarczy użyć
CREATE TABLE dbo.YourTableOne(ID INT IDENTITY(1,1), ...other columns...)
i skończ z tym.
Po wstawieniu wiersza do pierwszej tabeli możesz pobrać wartość kolumny tożsamości w następujący sposób:
-- 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, ......)
Aktualizacja: jeśli potrzebujesz wstawić wiele wierszy do pierwszej tabeli i przechwycić wiele wygenerowanych ID
wartości, użyj OUTPUT
klauzula:
-- 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)
a następnie idź stamtąd. Możesz pobrać dowolne wartości z nowo wstawionych wierszy do tymczasowej zmiennej tabeli, co pozwoli ci zdecydować, których nowych wartości identyfikatorów użyć dla których wierszy w drugiej tabeli