2011-12-19 36 views
1

這裏是我的情況:SQL服務器 - 表具體到每一個用戶

用戶輸入的日期範圍。存儲過程運行,根據日期填充其他表。用戶可以點擊一個按鈕來查看這些表格(從表格中選擇的另一個SP)。

Issue:

有多個用戶。每個用戶都需要能夠擁有自己的表格,可以這麼說,因爲日期範圍可能不同。現在,用戶1運行SP,它爲日期A和B填充表。然後,用戶2運行SP,它爲日期C和D填充表。現在用戶1進入並單擊查看按鈕,期待A和B日期的數據,但是會發生什麼情況是C和d的數據顯示,因爲誰跑的SP的最後一個用戶使用的日期,C和D.

我怎樣才能保持數據爲每個用戶單獨/地方?

謝謝。

+0

爲什麼要緩存查詢結果呢? – ConcernedOfTunbridgeWells 2011-12-19 16:36:04

+1

爲什麼你需要爲每個用戶再次擁有不同的表格?當然,一個表中有一個字段標識用戶數據的目的是爲了你? – 2011-12-19 16:38:29

回答

2

如果你真的需要存儲的查詢結果,那麼你需要鍵入結果集,無論是對用戶,或生成腳本ID用戶每次運行報表。

最簡單的方法是隻運行查詢的報告,而不是存儲結果。重新計算輸出,並在用戶每次運行報告時轉儲它(即不要 存儲結果)。

如果您確實需要存儲結果每個用戶只需要在任何給定時間使用一個日期範圍,那麼該表就可以用用戶ID進行註釋。

如果用戶可以使用多個場景,那麼需要爲每個用戶創建另一個包含場景的控制表。當用戶進行運行時,新的場景ID將被生成。在這種情況下,您將需要一個屏幕來允許用戶選擇場景,並且可能需要一些清理過時場景的方法。

+0

要展開,用戶輸入要包括的訂單的日期範圍。 SP然後獲得這個日期範圍內的所有訂單(數千個),所有項目(數千個)和訂單項目(數千個),並返回這些訂單的價值,我們可以生產多少等。SP執行時間很長。然後用戶想要查看哪些訂單和哪些項目/訂單組成這些值,以便點擊「查看」。當我從這些表格中提取數據時就是這樣。所以我確實需要存儲結果,而且似乎用戶標識列是推薦的方法。多謝你們。 – Rivka 2011-12-19 17:06:21

+0

如果您使用的是SQL Server,則可能需要考慮將其放入SSAS多維數據集並使用它進行分析。 – ConcernedOfTunbridgeWells 2011-12-19 17:22:02

0

你可以多一個列添加到表中,然後當你填入數據會話變量/用戶ID添加到這一列。

的查詢,然後從該表中,然後將需要選擇要更新的選擇會話變量/用戶ID匹配的地方。

0

聽起來像你每次刪除整個表,而不是嘗試僅刪除了誰在運行查詢的用戶數據。在SELECT上使用WHERE子句,以便每個用戶只能看到他們自己的數據。這意味着如果你還沒有存儲用戶名/ ID和每一行數據。

0

考慮存儲用戶ID與每個附加價值,然後在該用戶ID通過在所有的查詢。這樣,你可以用1臺和1個存儲過程。

因此,如果用戶A運行存儲過程,將記錄添加A-1A,A-2A。 當用戶B運行存儲過程時,它將添加記錄B-1B,B-2B,B-3B等。

當您單擊查看按鈕時,只需調用第二個存儲過程,再次傳遞用戶標識,並返回該用戶標識的行。