Den eneste levedygtige måde at gøre dette er at bruge INT IDENTITY
som SQL Server-databasen tilbyder. Stol på mig med denne – det gør du ikke ønsker at prøve at gøre dette på egen hånd!
Bare brug
CREATE TABLE dbo.YourTableOne(ID INT IDENTITY(1,1), ...other columns...)
og være færdig med det.
Når du har indsat en række i din første tabel, kan du hente værdien af identitetskolonnen på denne måde:
-- 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, ......)
Opdatering: hvis du har brug for at indsætte flere rækker i den første tabel og fange flere genererede ID
værdier, skal du bruge 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)
og så gå derfra. Du kan få alle værdier fra de nyligt indsatte rækker ind i den midlertidige tabelvariabel, som derefter giver dig mulighed for at bestemme, hvilke nye ID-værdier, der skal bruges til hvilke rækker til din anden tabel