基于表参数中的数据更新表的存储过程

时间:2012-12-05 17:33:45

标签: sql-server tsql

我想首先说明我是一个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

每个应用程序收集数据,然后使用存储过程将其提交到数据库。由于数据量可能因实际使用情况而异(并非总是发送每个类别)和每个应用程序,因此我考虑将数据作为DataTable发送,其中包含 CategoryID 的列表价值所以我不必为每个类别调用一个程序( Ptable )。

我需要根据 CategoryID Dtable 中的每条记录更新为 Ptable 中的正确值,但也需要通过 UserID进行过滤 ApplicationID UserID ApplicationID 将作为存储过程的两个其他参数给出。 Ptable 仅包含 CategoryID / Value 记录的列表。

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

如何根据 Ptable 中的不同记录更新表格?

P.S。
这些表的结构类似,以便在将来添加更多类别/应用程序时保持灵活性和可伸缩性。如果有更好的方法,我会很高兴知道。

1 个答案:

答案 0 :(得分: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;