2011-12-19 19 views
1

私のシナリオは次のとおりです。SQL Server - 各ユーザー固有のテーブル

ユーザー入力の日付範囲。ストアドプロシージャが実行され、日付に基づいて他のテーブルが作成されます。ユーザーはボタンをクリックしてこれらのテーブル(テーブルから選択する別のSP)を表示できます。

問題:

複数のユーザーがいます。各ユーザーは、日付範囲が異なる可能性があるため、言い換えると、独自の表を持つことができる必要があります。現在、ユーザー1はSPを実行し、日付AとBの表を作成します。ユーザー2は日付CとDの表にデータを入力するSPを実行します。ユーザー1は表示ボタンをクリックし、日付AとBのデータを予期します。 SPを実行した最後のユーザーがCとDの日付を使用したため、CとDのデータが表示されます。

各ユーザーごとにデータを個別/ローカルに保存するにはどうすればよいですか。

ありがとうございました。

+0

なぜクエリ結果を最初にキャッシュしていますか? – ConcernedOfTunbridgeWells

+1

なぜユーザーごとに異なるテーブルを再度作成する必要がありますか?確かに、データが意図されているユーザーを特定するフィールドを持つ1つのテーブルがあなたを務めますか? –

答えて

2

実際にクエリ結果を格納する必要がある場合は、結果セットをユーザーにキー入力するか、ユーザーがレポートを実行するたびにシナリオIDを生成する必要があります。

最も簡単な方法は、クエリをレポートとして実行し、結果を保存しないことです。ユーザーがレポートを実行するたびに出力を再計算します(つまり、 の結果を保存しないでください)。

各ユーザーのみが、その後の表は、ユーザーIDと注釈を付けることができ、任意の時点で1つの日付の範囲で動作する必要がある結果を保存する必要がある場合。

ユーザーが複数のシナリオで作業できる場合は、各ユーザーのシナリオを持つ別のコントロールテーブルが必要です。ユーザーが実行すると、新しいシナリオIDが生成されます。この場合、ユーザがシナリオを選択できるようにする画面が必要になります。また、廃止されたものを削除するための手段が必要になります。

+0

展開するには、ユーザが含む注文のデータ範囲を入力します。その後SPは、この日付範囲(千単位)、すべての明細(千単位)、および明細(千単位)内のすべての注文を受け取り、これらの注文がどれだけ価値があるか、どれくらい生産できるかなどの値を返します。次に、ユーザーは、どのオーダーとどのアイテム/オーダーがこれらの値を構成しているかを見たいので、「ビュー」をクリックします。そして、私がこれらのテーブルからデータを呼び出すのはその時点です。だから私は結果を格納する必要があり、それはユーザーID列が推奨されるアプローチだと思われる。みんなありがとう。 – Rivka

+0

SQL Serverを使用している場合は、これをSSASキューブに入れ、それを使用して分析を行うことができます。 – ConcernedOfTunbridgeWells

0

テーブルにもう1つの列を追加し、データを入力するときにこの変数にセッション変数/ユーザーIDを追加できます。

このテーブルから選択したクエリは、セッション変数/ユーザーIDが一致する場所を選択するために更新する必要があります。

0

あなたは毎回テーブル全体を削除しているように思えますが、代わりにクエリを実行しているユーザーのデータだけを削除してみてください。 SELECTにWHERE句を使用すると、各ユーザーは自分のデータだけを表示できます。これは、データの各行にユーザー名/ IDを格納しておく必要があることを意味します。

0

追加された値ごとにユーザーIDを格納し、すべてのクエリでユーザーIDを渡すことを検討してください。そうすれば、1つのテーブルと1つのストアドプロシージャを使用できます。

したがって、ユーザーAがストアドプロシージャを実行すると、レコードA-1A、A-2Aが追加されます。 ユーザーBがストアドプロシージャを実行すると、レコードB-1B、B-2B、B-3Bなどが追加されます。

ビューボタンをクリックすると、再度ユーザーIDを渡す2番目のストアドプロシージャを呼び出すだけで、そのユーザーIDの行を戻します。

関連する問題