0

5 つのパラメーターをstored-procedure受け取り、テーブルで更新を実行する があります

Update Table
Set field = @Field
Where col1= @Para1 and Col2=@Para and Col3=@Para3 and col4 =@aPara4

ユーザー プロスペクティブから、すべての条件パラメーターに対して複数の値を選択できます。たとえば、データベース テーブルのCol1に一致する必要がある 2 つのオプションを選択できます ( @Para1として渡す必要があります) 。

したがって、選択したすべての値を個別のリストに保存しています。

現時点では、更新を行うために foreach ループを使用しています

  foreach (var g in _list1)
            {
                foreach (var o in _list2)
                {
                    foreach (var l in _list3)
                    {
                        foreach (var a in _list4)
                        {
                           UpdateData(g, o, l,a);
                        }
                    }
                }
            }

これはデータベース呼び出しの番号を呼び出すため、これは良い方法ではないと確信しています。同じ結果を得るために、ループを無視して最小数の db 呼び出しを行う方法はありますか?

アップデート

私は他のアプローチを探していますTable-Valued Parameters

4

6 に答える 6

1

このフォームにクエリを送信できます。

Update Table Set field = @Field Where col1 IN {} and Col2 IN {} and Col3 IN {} and col4 IN {}

この方法でパラメータを渡します: https://stackoverflow.com/a/337792/580053

于 2013-09-16T16:53:42.067 に答える
1

テーブル値パラメーターは制限されていないため、XML ベースのアプローチを検討できます。

  • 渡す 4 つの列を含む XML ドキュメントを作成します。
  • ストアド プロシージャのシグネチャを変更して、4 つのスカラー パラメーターではなく、単一の XML 値パラメーターを受け入れるようにします。
  • ストアド プロシージャのコードを変更して、取得した XML に基づいて更新を実行します。
  • 4 つの入れ子になったループを使用してメモリ内に構築した XML を使用して、新しいストアド プロシージャを 1 回呼び出します。

これにより、ラウンドトリップの回数が減り、全体の実行時間が短縮されます。XML を使用して一度に多数の行を挿入する方法を説明している記事へのリンクを次に示します。あなたの状況はいくぶん似ているので、その記事で概説されているアプローチを使用できるはずです。

于 2013-09-16T16:19:24.017 に答える
1

考えられる 1 つの方法は、テーブル値パラメーターを使用して、条件ごとに複数の値をストアド プロシージャに渡すことです。これにより、コード内のループが減り、探している機能が引き続き提供されるはずです。

私が間違っていなければ、それらは SQL Server 2008 で導入されたので、2005 以前をサポートする必要がない限り、問題なく使用できるはずです。

于 2013-09-16T15:56:44.223 に答える
1

UpdateDataSet コマンドに Enterprise Libraryの MS Data Access Application Blockを使用することを検討してください。

基本的に、各行がパラメーター セットであるデータ テーブルを作成し、開いている接続に対してパラメーター セットの「バッチ」を実行します。

もちろん、いくつかの更新コマンドを含む文字列を作成し、DB に対して実行することで、それがなくても同じことができます。

于 2013-09-16T16:10:55.217 に答える
0

なぜこれにストアドプロシージャを使用しているのですか? 私の意見では、SP を使用して単純な CRUD 操作を行うべきではありません。ストアド プロシージャの真の力は、重い計算などに使用されます。

テーブル値パラメーターが私の選択ですが、他のアプローチを探しているので、より簡単な方法で、サーバー側コードで一括/一括更新クエリを動的に構築し、DB に対して実行してみませんか?

于 2013-09-16T16:16:31.060 に答える