これを行う唯一の実行可能な方法INT IDENTITY
は、SQL Server データベースが提供するものを使用することです。これを信じてください - あなたはこれを自分でやろうとはしません!
使うだけ
CREATE TABLE dbo.YourTableOne(ID INT IDENTITY(1,1), ...other columns...)
そしてそれで終わります。
最初のテーブルに行を挿入すると、次のように ID 列の値を取得できます。
-- 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)
そしてそこから行きます。新しく挿入された行から任意の値を一時テーブル変数に取得できます。これにより、2 番目のテーブルのどの行にどの新しい ID 値を使用するかを決定できます。