まず、SSIS が最善の策であると言っておきましょう。しかし、あなたが尋ねた質問に答えるために...
新しい ID をあちこちに作成してもうまくいくとは思えませんが、検索に使用するために元の ID を取得する必要があります。
あなたが得ることができる最高のものは、テーブルの挿入ステートメントです。SELECTXML サンプルからデータを取得するために s を実行するコードの例を次に示します。
declare @xml xml
set @xml='<People Key="1" FirstName="Bob" LastName="Smith">
<PeopleAddresses PeopleKey="1" AddressesKey="1">
<Addresses Key="1" Street="123 Main" City="St Louis" State="MO" ZIP="12345" />
</PeopleAddresses>
</People>
<People Key="2" FirstName="Harry" LastName="Jones">
<PeopleAddresses PeopleKey="2" AddressesKey="2">
<Addresses Key="2" Street="555 E 5th St" City="Chicago" State="IL" ZIP="23456" />
</PeopleAddresses>
</People>
<People Key="3" FirstName="Sally" LastName="Smith">
<PeopleAddresses PeopleKey="3" AddressesKey="1">
<Addresses Key="1" Street="123 Main" City="St Louis" State="MO" ZIP="12345" />
</PeopleAddresses>
</People>
<People Key="4" FirstName="Sara" LastName="Jones">
<PeopleAddresses PeopleKey="4" AddressesKey="2">
<Addresses Key="2" Street="555 E 5th St" City="Chicago" State="IL" ZIP="23456" />
</PeopleAddresses>
</People>
'
select t.b.value('./@Key', 'int') PeopleKey,
t.b.value('./@FirstName', 'nvarchar(50)') FirstName,
t.b.value('./@LastName', 'nvarchar(50)') LastName
from @xml.nodes('//People') t(b)
select t.b.value('../../@Key', 'int') PeopleKey,
t.b.value('./@Street', 'nvarchar(50)') Street,
t.b.value('./@City', 'nvarchar(50)') City,
t.b.value('./@State', 'char(2)') [State],
t.b.value('./@Zip', 'char(5)') Zip
from
@xml.nodes('//Addresses') t(b)
これが行うことは、XML からノードを取得し、データを解析することです。人々からリレーショナル ID を取得するには、../../ を使用してチェーンを上ります。