每天从SQL表中保留数据

时间:2016-07-28 23:31:26

标签: sql

我为一家小公司管理数据层应用程序,而我的SW因为部分成本核算的信息无法在历史上被检索而受到批评。因此,例如,他们希望能够在任何时间点检索6个月前零件的成本。

他们曾经通过电子表格来做到这一点。他们会每天将零件表复制到.xlsx文件中,然后随时他们想知道"嘿,去年1月20日那部分的成本是多少?"他们可以拉它在excel中。

所以,我们已经开始在SQL中做同样的事情,到目前为止的计划是每次更新部件成本时我们都会创建一个新表,用今天的日期命名表,并将其保存在数据库中以存档信息。然后,我们计划根据它的时间戳来提取我们需要的任何一张表。

我无能为力,但认为这会变得非常混乱。这对归档数据来说是一种糟糕的方法吗?我是否可以遵循任何行业标准来尽可能少地解决这个问题?

2 个答案:

答案 0 :(得分:1)

  

所以,我们已经开始在SQL中做同样的事情,到目前为止的计划是   我们将在每次更新零件成本时创建一个新表,   使用今天的日期命名表,并将其保存在数据库中   存档信息。然后,我们计划拉入任何一张桌子   我们需要根据它的时间戳。

     

我不禁想到这会变得非常混乱。这是不好的   存档数据的方法?我有什么行业标准吗?   坚持尽可能少地解决这个问题?

你是对的......这个解决方案会很混乱。

您可以做的最简单的事情是创建一个历史表说Parts_History ,它将所有列作为主要的Parts表,并添加其他时间戳列来跟踪更新。每次有一个零件的新价格(我希望通过存储过程完成),现有价格将被移动到新表中,主表会更新 ALL一次交易。如果您没有一个处理更新的SP,那么您可以在触发器内执行此操作。

我会试着看看那里是否有好的例子。

答案 1 :(得分:1)

就我而言,现在没有标准,但方法相当明显。你有一张表part(partid int primary key, price decimal)。在part_audit(auditId int identity(1,1) primary key, partId int, price decimal, dateChange datetime default getdate())上创建审核表part after update, delete和触发器。在触发器中检查update(price),如果是,请从part_audit插入deleted。要查找历史价格,请在感兴趣的日期后选择最近的dateChange