親子関係にいくつかの行を挿入しようとしています。SQLでこれをどのように達成しますか?
これは、挿入する情報を見つけるために使用する基本クエリになります。
SELECT * FROM parentTable p
INNER JOIN childTable c
ON p.ID = c.ParentTableID
WHERE p.PlanID = 123456
必要なのは、最初に ParentTable 行を挿入することです。これは、実際には一致した行の単なるコピーですが、新しい PlanID と Created Date が含まれています。次に、挿入された行からその 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