0

同様のタイプのノードがほとんどないXMLファイルがあります。これらの各ノードには、子ノードが含まれます。要件は、メインノードのデータを特定のテーブルに挿入し、その子テーブルの各データを、最初の挿入の主キーとして外部キーを設定して特定の子テーブルに挿入する必要があることです。XMLは次のサンプルのようになります。

       <XML>
          <Provider>
              <providerID>1</ProviderID>
              .
              .
              .
              <ContactInfo>
                 <Address>address1</Address>
                 .
                 .
              </ContactInfo>                  
          </Provider>
           <Provider>
              <providerID>2</ProviderID>
              .
              .
              .
              <ContactInfo>
                 <Address>Address2</Address>
                 .
                 .
              </ContactInfo>                 
          </Provider>   

正確な要件は、最初にプロバイダーデータをTable1に挿入する必要があり、次に各プロバイダー内のContactInfoをTable2のFKとしてTable1のPKとともにTable2に挿入する必要があることです。

複雑なループを回避して、これをc#.netに効率的に実装するにはどうすればよいですか?誰かがこれについて私を助けてください....

4

1 に答える 1

1
Declare @xml xml
Set @xml = 
'<XML>
<Provider>
    <providerID>1</providerID>
    <ContactInfo>
        <Address>address1</Address>
    </ContactInfo>                  
</Provider>

<Provider>
    <providerID>2</providerID>
    <ContactInfo>
        <Address>address2</Address>
    </ContactInfo>                  
</Provider>

</XML>'

Select 
X.T.value('(providerID)[1]', 'int'),
X.T.value('(ContactInfo/Address)[1]', 'varchar(100)')
From @xml.nodes('/XML/Provider') as X(T)

わかった。これで、xmlからデータを抽出するためのクエリが得られました。これらすべてのレコードを一時テーブルに挿入することから始めます。

完了したら、最初のテーブルに挿入します。終わり?次に、結合レコードを挿入します(最初のテーブルと一時テーブルを結合して、最初のテーブルから主キーの値を取得します)。

最後に、2番目の一時テーブルを2番目のテーブルに挿入します。

于 2012-08-04T07:45:16.340 に答える