0

次のことをどのように行うべきかについてのアドバイスを探しています。

  1. SQL サーバーに、約 3 ~ 600 万のレコードと 51 列のテーブルがあります。
  2. 数学的計算で取り込まれた 45 列のデータから値を計算した後、1 列のみを更新する必要があります。
  3. 私はすでに C# で計算を行っており、そこから Datatable を作成できます [数百万のレコードが含まれています]。

今、最も効率的な方法でそれらをデータベースに更新したいと考えています。私が知っているオプションは

  1. データ リーダーでループを使用して計算を行い、DataTable を作成するため、すべてのレコードで更新クエリを実行します。
  2. 一時テーブルを作成し、SQLBulkCopy を使用してデータをコピーし、後で MERGE ステートメントを使用する
  3. 実行するのは非常に困難ですが、SQL 内で関数を作成してすべての計算を実行し、一度に更新する条件なしで単純な更新を実行することができます。

どちらの方法がより速いか、より良いかはわかりません。何か案が?

編集:ストアドプロシージャを使用するのが怖い理由

  1. まず、どのように書いたのかわかりません。これを行うのはかなり新しいです。多分それは今それをする時です。
  2. 私の数式は、1 つの列を取り、それらに 1 つの数式を適用し、[列名の一部でもある] 追加の定数値を加えてから、45 列すべてを取り、別の数式を適用します。
  3. 結果は46列目に格納されます。

ありがとう。

4

3 に答える 3

3

データベース内の他のフィールドからの計算を含むフィールドがある場合は、そのフィールドを計算フィールドにするか、トリガーを介して維持することをお勧めします。これにより、データが任意のソースから変更されるたびに計算が維持されます。

于 2013-08-29T12:59:20.457 に答える
0

SQL から直接呼び出すことができる .net 関数を作成できます。http ://msdn.microsoft.com/en-us/library/w2kae45k%28v=vs.90%29.aspxを作成する方法のリンクです。関数を作成したら、単純な更新ステートメントを実行します

于 2013-08-29T12:56:22.750 に答える
0

C# でスカラー値関数を作成し、それを計算列の一部として呼び出すことはできませんか?

于 2013-08-29T12:57:24.437 に答える