Cách khả thi duy nhất để làm điều này là sử dụng INT IDENTITY
mà cơ sở dữ liệu SQL Server cung cấp. Hãy tin tôi vào điều này - bạn đừng muốn tự mình làm điều này!
Chỉ cần sử dụng
CREATE TABLE dbo.YourTableOne(ID INT IDENTITY(1,1), ...other columns...)
và được thực hiện với nó.
Khi bạn chèn một hàng vào bảng đầu tiên của mình, bạn có thể truy xuất giá trị của cột nhận dạng như sau:
-- 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, ......)
Cập nhật: nếu bạn cần chèn nhiều hàng vào bảng đầu tiên và nắm bắt nhiều ID
đã tạo , sử dụng OUTPUT
mệnh đề:
-- 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)
và sau đó đi từ đó. Bạn có thể nhận bất kỳ giá trị nào từ các hàng mới được chèn vào biến bảng tạm thời, sau đó sẽ cho phép bạn quyết định giá trị ID mới nào sẽ sử dụng cho hàng nào cho bảng thứ hai của bạn