大規模なテキストファイルの履歴税関データをデータベースに読み込む必要がありますが、データはちょっと混乱しています。SQLを使用して異なる日付の複合エントリ
関税タイプと尺度(実際の速度及び有効日)から成る
タイプは、タイプコードと説明により定義されます。 メジャーには、レート、それに適用される地理的エリア、レート、開始日、終了日が含まれます。
問題は、1つのエントリに複合される必要がある異なる有効日付を持つ同じ料金表に対して複数のエントリがあることです。
(のTypeCode、エリア、レート、開始日、終了日、説明)
1:01021000#GEN #FREE#20050101#20061231#純血繁殖ANIMALS#
テキストファイルには、次のようになります 2:01021000#GEN #FREE#20070101#20071231#純血繁殖動物#
3:01021000#GEN #FREE#20080101#99999999#純血繁殖動物#
4:01029000#GEN位00000040.000%位20050101#20061231#OTHER#
5:01029000#GEN#00000040.000%#20070101#20071231#OTHER#
6:01029000#GEN#00000030.000%#20080101#20091231#OTHER#
7:この例では01029000#EU#00000030.000%の#20070101#20071231#OTHER#
:
- 1、2第 STARTDATEと最後ENDDATE (01021000#GEN #FREE #20050101#99999999#純血繁殖動物#)
- 4、に配合される5人のニーズと、ワン尺度に を配合する3人のニーズone fとの測定IRST STARTDATE と最後ENDDATE(01029000#GEN #00000040.000%#20050101#20071231#OTHER#)それが異なるから あるため 異なる速度
- 7は、別個に滞在しなければならない持っているので
- 6は、別個に滞在しなければなりません地理的エリア
私はc#とSQLコンパクトエディションを使用しています。私はそれが主に動作しているが、それは非常に遅いです...私のインテルi3のラップトップ(66000エントリ)で約40分かかる今より効率的な方法がある必要があります
私は書いた私のステップとコンパウンディングパートのコードが与えられました。日付が後に続くかどうかを確認する必要があります。
ステップ:
トークン
に行は次のように測定テーブルに値を挿入しタイプテーブルに
をユニークするTypeCodeとその説明を挿入行
分割によってテキストファイルの行を読みますコード:
// check to see if a measure with the same typecode, area and rate has already been inserted
String select = string.Format("SELECT TypeCode FROM Measure WHERE TypeCode = '{0}' AND AreaCode = '{1}' AND Rate = '{2}'", tokens[1], tokens[3], tokens[4]);//string.Format("SELECT TypeCode FROM Measure WHERE TypeCode = '{0}'", tokens[1]);
SqlCeDataAdapter adapter = new SqlCeDataAdapter(select, con);
DataTable table = new DataTable(); // Use DataAdapter to fill DataTable
adapter.Fill(table);
// if there are no similar records insert this one
if (table.Rows.Count <= 0)
{
string insert = "INSERT INTO Measure VALUES (@TypeCode, @UOM, @AreaCode, @Rate, @StartDate, @EndDate)";
SqlCeCommand com = new SqlCeCommand(insert, con);
com.Parameters.AddWithValue("@TypeCode", tokens[1]);
com.Parameters.AddWithValue("@UOM", tokens[2]);
com.Parameters.AddWithValue("@AreaCode", tokens[3]);
com.Parameters.AddWithValue("@Rate", tokens[4]);
com.Parameters.AddWithValue("@StartDate", tokens[5]);
com.Parameters.AddWithValue("@EndDate", tokens[6]);
com.ExecuteNonQuery();
}
else
{
// update the current record with the new enddate
string update = "UPDATE Measure SET EndDate = @EndDate WHERE TypeCode = @TypeCode AND AreaCode = @AreaCode AND Rate = @Rate";
SqlCeCommand com = new SqlCeCommand(update, con);
com.Parameters.AddWithValue("@EndDate", tokens[6]);
com.Parameters.AddWithValue("@TypeCode", tokens[1]);
com.Parameters.AddWithValue("@AreaCode", tokens[3]);
com.Parameters.AddWithValue("@Rate", tokens[4]);
com.ExecuteNonQuery();
}
ご意見やご感想をお寄せください。
うわー、ありがとう、インデックスが大きな違いを作った! 40分から約2分まで! – Neil