2017-04-24 14 views
0

これは簡単な問題ですが、これを行うための構文を理解することはできません。私はデータの移行をやっています。新しい親テーブルにリンクしたいテーブルの既存のレコードがいくつかあります。 、それぞれの既存の子レコードの親レコードを挿入してリンクされた子を更新する

declare @Parent table 
(
    ID int identity(1,1), 
    DummyField int 
) 

declare @Child table 
(
    ID int identity(1,1), 
    ParentID int, -- assume this is a new column, all nulls 
    DummyField int 
) 

それにリンクする新しい親レコードと更新の子供を挿入します。

のは、私は2つのテーブルがあるとしましょう。

これだけです。それはとてもシンプルですが、私はカーソルを使わなければそれを理解できません。私はここで何かを逃した場合を除き

+0

、このようにしてみてください。 IDがありますか、それともIDの価値を提供していますか?子供が最初に来るところの親子関係船を持つことはちょっと変わったようだ。おそらく、あなたはこれを少し拡大して、もっと詳細を使うことができます。 OUTPUTやMERGEを使用しているかもしれませんが、ここで何をしようとしているのかは分かりません。 –

+0

両方のテーブルのID列はID列であるため、これらの値は自動です。これはデータ移行のためです。そのため、親レコードなしで子レコードが既に存在するのはこのためです。 – BradDaBug

+0

ステップ1)列にIDとParentIDを持つテーブル変数を使用し、ChildのIDとParentIDのrow_number()で入力します。ステップ2)ParentIDをテーブル変数からParentテーブルに入力します。ステップ3)IDのテーブル変数に子テーブルを結合し、ParentIDを更新します。ステップ4)ネットフリックスとチル。 – Anand

答えて

1

Seudo SQLロジックは...

insert in to parent. 

update childern 
set ParentID = select @@IDENTITY 
where ParentID = @previousParentId 

非常に簡単であると思われますか?子と親betwwen

+0

これは単一のレコードで機能しますが、カーソルに頼らずに複数のレコードを一度に処理しようとしています。 – BradDaBug

0

関係はHVがそうachiveする出力句を使用する

にあなたが欠落している、

はそう単純でありながら、そのような漠然とした質問

declare @output table (parentid int) 
insert into parent (parentid) 
output inserted.parentid into @output 
-- values 


update c 
set ParentID = o.parentid 
from children c 
inner join @output o on c.parentid=o.parentid 
+0

設定前にc.parentidに参加していませんか? – BradDaBug

+0

@ BradDaBug、あなたはhvが提供してwht私は理解しました。私はhvを一括挿入/更新に戦争のスクリプトを変換する – KumarHarsh

関連する問題