我想在父/子關係中插入一些行。我知道如何在.NET中做到這一點,但不能退出T-SQL。多表插入與合併?
這將是基本查詢我會用它來查找信息,我會被插入:
SELECT * FROM parentTable p
INNER JOIN childTable c
ON p.ID = c.ParentTableID
WHERE p.PlanID = 123456
需要採取什麼是我第一次插入ParentTable行這真的只是一個副本匹配的行,但具有新的PlanID和創建日期。然後,我從插入的行中獲取該ParentTable ID,並將其用於相同的過程,但用於子表。
因此,我需要在.Net中說至少是我循環所有父表匹配的位置,併爲每個匹配創建一個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
嚴格地說,您可以使用可更新的分區視圖在一個語句中插入到多個表中......只是在這裏挑剔。 – usr