我創建一個涉及父表和子表的數據庫插入腳本。在數據中插入腳本如何將父記錄的ID放在子記錄中?
父記錄的自動生成的ID將被插入到子記錄作爲引用密鑰。
問題是我不知道在腳本中如何告訴SQL服務器在子表記錄中使用插入的父記錄的ID作爲參考。請幫助我如何將父ID放在子插入語句中。
我創建一個涉及父表和子表的數據庫插入腳本。在數據中插入腳本如何將父記錄的ID放在子記錄中?
父記錄的自動生成的ID將被插入到子記錄作爲引用密鑰。
問題是我不知道在腳本中如何告訴SQL服務器在子表記錄中使用插入的父記錄的ID作爲參考。請幫助我如何將父ID放在子插入語句中。
在你的代碼的頂部做到這一點:
DECLARE @parent_id int
然後,你做的INSERT INTO父表後立即這樣做:
SELECT @parent_id = SCOPE_IDENTITY()
檢索的大多數id最近插入到父表中。
最後,在INSERT INTO子表,做這樣的事情:
INSERT INTO child_table (parent_id, colA, colB, colC) SELECT @parent_id, valueA, valueB, valueC;
(我只是做了值a,等等 - 你知道你的插件放入孩子的樣子,只是確保PARENT_ID與@parent_id匹配
如果你在你的表格批量插入您可以直接在插入語句插入的搶ID,然後使用這些值子實體的進一步處理,例如:。
Declare @out Table(id int, some_col int)
Insert Into SomeTable(some_col)
Output inserted.id, inserted.some_col Into @out
Values(5),(6)
現在,如果需要,現在您的表格變量中已插入標識以及其他一些列值。
在單獨插入的情況下,您也可以根據您的邏輯使用Scope_Identity
或@@Identity
。
可能是這工作得很好
CREATE TABLE PARENT
(
Pid int primary key identity(1,1)
,Pdescription varchar(100)
)
CREATE TABLE Child
(
ChildId int primary key identity(1,1)
,PidcHILD int foreign key references parent(pid)
)
CREATE TABLE #TEMPChild
(
PidcHILD int
)
BEGIN TRAN
INSERT INTO PARENT
OUTPUT inserted.Pid
INTO #TEMPChild(PidcHILD)
VALUES('Record1');
INSERT INTO Child(PidcHILD)-- Add other columns here for child table
SELECT PidcHILD FROM #TEMPChild
COMMIT TRAN
SELECT * FROM Child
SELECT * FROM PARENT
第1步:獲得最大的(PID)形式父表。 第2步:存儲變量。步驟3:將此變量插入到子表中。
你的問題不清楚。請提供一些樣本數據和預期結果。 –