2012-01-20 15 views
0

私は一晩からコピーする必要がある別のSQLサーバー上のテーブルを持っています。宛先テーブルの構造は非常に似ていますので、私はちょうど以下のコードのようなものを使用するつもりでした。 ソース - http://forums.asp.net/t/1322979.aspx/1linqを使用してあるテーブルから別のテーブルにデータをコピーする最速の方法

私はこれをまだ試していませんが、linqでこれを行うにはより良い/早い方法がありますか?大量のデータを挿入するためにLINQを使用し

//there exist two table list and listSecond 
    DataClassesDataContext dataClass = new DataClassesDataContext(); //create the instance of the DataContext 

    var str = from a in dataClass.lists select a; 
    foreach (var val in str) // iterator the data from the list and insert them into the listSecond 
    { 
     listSecond ls = new listSecond(); 
     ls.ID = val.ID; 
     ls.pid = val.pid; 
     ls.url = val.url; 
     dataClass.listSeconds.InsertOnSubmit(ls); 

    } 
    dataClass.SubmitChanges(); 
    Response.Write("success"); 
+4

おそらく、選択結果を挿入するストアドプロシージャを作成する方が早いでしょう。 LINQが何をするのかはっきりしていませんが、INSERT ... VALUESステートメントのロードが終わる可能性があります。いつでもdatacontextにストアドプロシージャを追加することができます。 –

+0

誰かがGoogleからここに来る場合に備えてちょっとした文脈を追加するだけです。私は "Stored Procedures bad and LINQ good"という段階を経て、最初に質問したのです。明らかに、それは持っている間違った態度でした、そして、これは仕事のための適切なツールを選ぶ良い例です。 – Hoody

答えて

3

は多分コピーされる前に多くの変換を必要とする複雑なスキーマを除いて、良いアイデアではありません。挿入された行ごとに個別のクエリが作成され、トランザクションログにすべて記録されます。

これは、SqlBulkCopyを使用しています。SqlBulkCopyを使用しています。これは、大量のデータを1つのクエリに挿入し、トランザクションログを遅くして遅くする方法です。 の順番で、より速く、となり、私は両方の方法で個人的な経験からこれを伝えています。

+0

すごく早くありがとう! – Hoody

関連する問題