唯一可行的方法是使用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 值用于第二个表的哪些行