【问题标题】:SQL Server - Tables Specific to Each UserSQL Server - 特定于每个用户的表
【发布时间】:2011-12-19 16:34:29
【问题描述】:

这是我的场景:

用户输入日期范围。存储过程运行,它根据日期填充其他表。然后用户可以单击一个按钮来查看这些表(从表中选择的另一个 SP)。

问题:

有多个用户。可以这么说,每个用户都需要能够拥有自己的表格,因为日期范围可能不同。现在,用户 1 运行 SP 填充日期 A 和 B 的表。然后用户 2 运行 SP 填充日期 C 和 D 的表。现在用户 1 去并单击查看按钮,期待日期 A 和 B 的数据,但会发生什么是 C 和 D 的数据,因为最后一个运行 SP 的用户使用了日期 C 和 D。

如何为每个用户单独/本地保存数据?

谢谢。

【问题讨论】:

  • 为什么要缓存查询结果?
  • 为什么又需要为每个用户创建不同的表?肯定是一张表,其中包含一个字段来标识数据的目标用户吗?

标签: sql-server


【解决方案1】:

如果您确实需要存储查询结果,那么您需要在用户上键入结果集,或者在每次用户运行报表时生成一个场景 ID。

最简单的方法是将查询作为报告运行而不存储结果。每次用户运行报告时重新计算输出并转储它(即不要 存储结果)。

如果您确实需要存储结果并且每个用户只需要在任何给定时间使用一个日期范围,那么可以使用用户 ID 对表格进行注释。

如果用户可以使用多个场景,则需要有另一个控制表,其中包含每个用户的场景。当用户运行时,会生成一个新的场景 ID。在这种情况下,您将需要一个屏幕来允许用户选择场景,并且可能需要一些清除过时场景的方法。

【讨论】:

  • 为了展开,用户正在输入要包含的订单的日期范围。然后,SP 获取此日期范围内的所有订单(千)、所有项目(千)和订单项(千),并返回这些订单的价值、我们可以生产多少等值。SP 执行时间很长。然后用户想要查看哪些订单以及哪些商品/订单构成了这些值,因此他单击“查看”。就在那时,我从这些表中调出数据。所以我确实需要存储结果,似乎用户 ID 列是推荐的方法。谢谢大家。
  • 如果您使用的是 SQL Server,您可能希望将其放入 SSAS 多维数据集并使用它进行分析。
【解决方案2】:

您可以在表中再添加一列,然后当您用数据填充它时,将会话变量/用户 ID 添加到该列。

然后需要更新从此表中选择的查询,以选择会话变量/用户 ID 匹配的位置。

【讨论】:

    【解决方案3】:

    听起来您每次都在删除整个表,而是尝试只删除运行查询的用户的数据。在 SELECT 上使用 WHERE 子句,这样每个用户只能看到自己的数据。这意味着您需要将用户名/ID 与每行数据一起存储(如果您还没有的话)。

    【讨论】:

      【解决方案4】:

      考虑为每个附加值存储一个用户 ID,然后在所有查询中传入该用户 ID。这样你就可以使用 1 个表和 1 个存储过程。

      因此,如果用户 A 运行存储过程,它将添加记录 A-1A、A-2A。 当用户 B 运行存储过程时,它会添加记录 B-1B、B-2B、B-3B 等。

      当您单击查看按钮时,只需调用第二个存储过程,在其中再次传递用户 ID,它会返回该用户 ID 的行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-04
        相关资源
        最近更新 更多