我正在尝试在父/子关系中插入一些行。如何在 SQL 中实现这一点?
这将是我用来查找要插入的信息的基本查询:
SELECT * FROM parentTable p
INNER JOIN childTable c
ON p.ID = c.ParentTableID
WHERE p.PlanID = 123456
需要发生的是我首先插入 ParentTable 行,这实际上只是匹配行的副本,但具有新的 PlanID 和创建日期。然后我从插入的行中获取该 ParentTable ID 并将其用于相同的过程,但用于子表。
所以我需要在 .Net 中做的至少是循环遍历所有 parentTable 匹配并为每个匹配创建 1 个 childTable 行。
我试图使用MERGE
和OUTPUT
子句,但似乎我可能正在使用方钉作为圆孔。使用某种类型的 CURSOR 会更好吗?
所以这就是我到目前为止根据下面的答案所得到的。不幸的是,它没有抓住SCOPE_IDENTITY()
......有什么诀窍吗?因为那是返回 NULL 我在插入时得到 FK 错误。
USE MemberCenteredPlan
DECLARE @NewPlanID BIGINT;--49727690
DECLARE @OldPlanID BIGINT;--49725211
DECLARE @NewSWReAssID BIGINT;
SET @NewPlanID = 49727690
SET @OldPlanID = 49725211
BEGIN
INSERT INTO tblSocialWorkerReAssessment
SELECT
@NewPlanID
,[Discussed]
,Discussion
,NULL
,NULL
,NULL
,CreatedBy
,GETDATE()
,NULL
,NULL
FROM tblSocialWorkerReAssessment
WHERE PlanID = @OldPlanID
SELECT @NewSWReAssID = SCOPE_IDENTITY();
INSERT INTO tblPlanDomain
SELECT
@NewPlanID
,[DomainTypeID]
,[MemberOutcomes]
,[MemberPreferences]
,[DomainDate]
,[Steps]
,[ClinicalFunctionalConcerns]
,[ReportWageES]
,[ReportWageSSA]
,@NewSWReAssID
,[CreatedBy]
,GETDATE()
,NULL
,NULL
,NEWID()
FROM tblPlanDomain
WHERE planID = @OldPlanID
END