1

私は SQL 初心者であることを述べることから始めたいので、この問題を解決しようとするときのワークフローや考え方について、提案やコメントをいただければ幸いです。

私が行っているのは、いくつかのアプリケーションに関する使用統計をいくつかのカテゴリ (必ずしもすべてのカテゴリがすべてのアプリケーションに適用されるわけではありません) で収集し、データベースに保存することです。

それを行うためにいくつかのテーブルを設定し、次にそのように構造化されたすべてをリンクする 1 つのテーブルを設定しました (以降: Dtable ):

(column name - details)  
UserID  - foreign key to another table which stores users data  
ApplicationID - foreign key to another table which stores applications data  
CategoryID - foreign key to another table which holds a list of different categories  
Value - the actual data

各アプリケーションはデータを収集し、ストアド プロシージャを使用してデータベースに送信します。データの量は実際の使用状況 (常にすべてのカテゴリを送信するわけではありません) に基づいて異なる可能性があるため、アプリケーションごとに、CategoryIDValueのリストを含む DataTable としてデータを送信することを考えていたので、個々のカテゴリごとの手順 ( Ptable )。

CategoryIDに従って、 Dtableの各レコードをPtableの正しい値に更新する必要がありますが、 UserIDおよびApplicationIDによってもフィルター処理されます。UserIDApplicationIDは、ストアド プロシージャへの他の 2 つのパラメータとして与えられます。Ptableには、 CategoryID / Valueレコードのリストのみが含まれます。

今、私はカーソルについて読んだ(テーブルパラメータの各レコードについて、データベーステーブルの関連データを設定する)が、コンセンサスは「絶対に避ける」ようだ。

Ptableのさまざまなレコードに基づいて、テーブルを更新するにはどうすればよいでしょうか。

PS
テーブルは、将来的にカテゴリやアプリケーションを追加する際の俊敏性とスケーラビリティを維持するために、このように構成されています。それを行うためのより良い方法があれば、私は知ってうれしいです.

4

1 に答える 1

1

update ステートメントは次のようになると思います。@ApplicationID@UserIDは、ストアド プロシージャの他のパラメーターです。

update Dtable
    set Dtable.Value = p.Value
    from Ptable p
    where Dtable.UserID = @UserID
        and Dtable.ApplicationID = @ApplicationID
        and Dtable.CategoryID = p.CategoryID;
于 2012-12-05T20:18:23.090 に答える