2012-12-05 101 views
1

我想聲明我是一個SQL小白開始進行數據更新表,所以試圖解決這個問題時,我會很感激我的工作流程和/或心態有任何建議或意見。存儲過程,根據從表參數

我在做什麼是收集使用統計約幾個應用程序,在幾類(不是所有種類不一定適用於所有應用程序),將它們存儲在數據庫中。

我已經設置了幾桌要做到這一點,再一個表,一切融合在一起是真實結構像這樣鏈接(從現在起: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 

每個應用程序收集的數據,然後使用存儲過程將其提交給數據庫。隨着數據量可以根據實際使用情況是不同的(並不總是發送每一個類別),併爲每個應用程序,我想用類別ID值的列表,發送數據作爲一個DataTable的,所以我不會必須爲每個類別調用一個程序(Ptable)。

我需要在DtablePTABLE更新每個記錄的正確值根據類別ID,也受到用戶名的applicationID過濾。 用戶ID的applicationID將給出其它兩個參數來存儲的過程。 PTABLE只包含類別ID/記錄列表。現在

,我讀到光標(在參數表中的每個記錄設置在數據庫表中的相關數據),但共識似乎是「不惜一切代價避免」。

我該如何去更新表格,然後根據中的變化記錄Ptable

P.S.
這些表格的結構非常適合未來在添加更多類別/應用程序時保持靈活性和可擴展性。如果有更好的方法來做到這一點,我會很高興知道。

+0

在Dtable,在那裏只有一個值的用戶ID,的applicationID的特定組合,和CATEGORYID? –

+0

@Zach Esposito: 對於相同的UserID和ApplicationID,可能有多個值,但每個UserID和ApplicationID和CategoryID只能有一個值。 –

+0

在這種情況下,聽起來你需要所有三個ID來知道要更新哪個值,Ptable是否也包含UserID和ApplicationID? –

回答

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; 
+0

另外,作爲小提琴測試:http://sqlfiddle.com/#!3/2c49c/4 –

+0

小提琴(這真的很整潔,我希望我以前知道它,也爲此感謝!)似乎像廣告一樣工作。 :) 謝謝@Zach Esposito! –