【发布时间】:2012-12-06 04:18:23
【问题描述】:
我想首先声明我是一个 SQL 菜鸟,因此在尝试解决此问题时,我将不胜感激有关我的工作流程和/或心态的任何建议或 cmet。
我正在做的是收集几个应用程序的使用统计信息,在几个类别中(并非所有类别都一定适用于所有应用程序),并将它们存储在数据库中。
我已经设置了几张表来执行此操作,然后用一张表将所有结构链接在一起(从现在开始: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
每个应用程序都会收集数据,然后使用存储过程将其提交到数据库。由于数据量可能会根据实际使用情况(并不总是发送每个类别)和每个应用程序而有所不同,因此我正在考虑将数据作为带有 CategoryID 和 列表的 DataTable 发送值,因此我不必为每个单独的类别(Ptable)调用一个过程。
我需要根据CategoryID将Dtable中的每条记录更新为Ptable中的正确值,同时也通过UserID过滤 和 ApplicationID。 UserID 和 ApplicationID 将作为其他两个参数提供给存储过程。 Ptable 只包含 CategoryID / Value 记录的列表。
现在,我读到了游标(为表参数中的每条记录设置数据库表中的相关数据),但共识似乎是“不惜一切代价避免”。
那么,我将如何根据 Ptable 中的不同记录来更新表?
附言
这些表的结构是这样的,以在将来添加更多类别/应用程序时保持敏捷性和可扩展性。如果有更好的方法,我会很高兴知道。
【问题讨论】:
-
在 Dtable 中,UserID、ApplicationID 和 CategoryID 的特定组合是否只有一个 Value?
-
@Zach Esposito:同一个 UserID 和 ApplicationID 可能有多个值,但每个 UserID AND ApplicationID AND CategoryID 只有一个值。
-
在这种情况下,听起来您需要所有三个 ID 才能知道要更新哪个值,Ptable 是否还包含 UserID 和 ApplicationID?
-
@Zach Esposito:UserID 和 ApplicationID 将作为另外两个参数发送到存储过程,并且保持不变。我们的想法是为单个应用程序更新属于该单个用户的所有类别。
标签: sql-server tsql