bulkinsert C#を使用して1列を更新

c# sql sqlbulkcopy

質問

私は250万レコードのデータベースを持っています。データベースの1つの列が空です。今私は簡単な更新クエリが多くの時間がかかるので、バルクで挿入して、その列を埋めるしたいと思います。しかし、問題は、bulkinsertが開始からではなく、最後にレコードを挿入し始めることです。ここに私のコードです:

using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
{
     for (int j = 0; j < rows.Length; j++)
     {
         DataRow dailyProductSalesRow = prodSalesData.NewRow();                   
         string[] temp = ((string)rows[j]["Area"]).Split(new string[] { " ", "A","a" }, StringSplitOptions.None);
         if (Int32.TryParse(temp[0], out number))
         {
             int num1 = Int32.Parse(temp[0]);
             dailyProductSalesRow["Area1"] = 1;
         }
         else
         {
             dailyProductSalesRow["Area1"] = 0;
             Console.WriteLine("Invalid "+temp[0]);
         }
         prodSalesData.Rows.Add(dailyProductSalesRow);
     }
     s.DestinationTableName = prodSalesData.TableName;

     foreach (var column in prodSalesData.Columns)
     {
         s.ColumnMappings.Add(column.ToString(), column.ToString());
     }
     try
     {
         s.WriteToServer(prodSalesData);
     }
     catch (Exception e)
     {
         Console.WriteLine(e.ToString());
     }
}

人気のある回答

更新が必要な場合は、 UPDATEステムセットを使用してください

BULK INSERTは、 INSERTがデータベースに大量のデータを取得しようとすると非常に遅くて使いにくいため、多くのレコードを高速にINSERTできるように設計されています。

UPDATEは既にデータベース内のレコードを更新する最速の方法です。あなたの場合、私はあなたのBULK INSERTうとしていることに基づいてこのような文をほしいと思うでしょう。

UPDATE SalesData
SET Area1 = CONVERT(INT, SUBSTRING(Area, 0, CHARINDEX('A', Area)))

それをより速くしようとする場合は、 一括インポートのパフォーマンス最適化してみてください。そこにあるアドバイスの一部(データベースで使用されているリカバリモデルなど)は、多くのレコードを更新するときにUPDATEパフォーマンスにも適用できます。



ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ