我想首先说明我是一个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。
这些表的结构类似,以便在将来添加更多类别/应用程序时保持灵活性和可伸缩性。如果有更好的方法,我会很高兴知道。
答案 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;