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

每个应用程序收集数据,然后使用存储过程将其提交到数据库。由于数据量可能会根据实际使用情况(并不总是发送每个类别)和每个应用程序而有所不同,我正在考虑将数据作为带有CategoryIDValue列表的 DataTable 发送,因此我不必调用每个单独类别的程序(Ptable)。

我需要根据CategoryID将Dtable中的每条记录更新为Ptable中的正确值,但还要按UserIDApplicationID过滤。UserIDApplicationID将作为其他两个参数提供给存储过程。Ptable仅包含CategoryID / Value记录的列表。

现在,我读到了游标(为表参数中的每条记录设置数据库表中的相关数据),但共识似乎是“不惜一切代价避免”。

那么,我将如何根据Ptable中的不同记录来更新表?

PS
这些表格的结构是这样的,以便在将来添加更多类别/应用程序时保持敏捷性和可扩展性。如果有更好的方法,我会很高兴知道。

4

1 回答 1

1

我相信更新语句看起来像这样,存储过程的其他参数在哪里@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 回答