历史表的数据库设计

时间:2019-05-30 13:20:24

标签: sql sql-server

我有一张雇主表(表A)。我想用一个额外的日期列(表B)创建一个类似的表,以显示插入行的日期。我想在每个月底将表A中的行插入到新表中。有没有办法在SQL中自动执行此操作?

我听说您可以通过存储过程来做到这一点,但是我没有使用它们的经验,任何指导将不胜感激。

这是表格的样子:

MemberID First Last   Department Salary Daily_Hours Active_Flag
100      Evan  Turner Sales      75000  8           1
200      Ron   Gold   Marketing  80000  9           1
300      Bob   Gun    HR         50000  8           1

所需的输出:

ID MemberID First Last   Department Salary Daily_Hours Active_Flag Date
1  100      Evan  Turner Sales      75000  8           1           3/31/19
2  200      Ron   Gold   Marketing  80000  9           1           3/31/19
3  300      Bob   Gun    HR         50000  8           1           3/31/19
4  100      Evan  Turner Sales      75000  8           1           4/30/19
5  200      Ron   Gold   Marketing  80000  9           1           4/30/19
6  300      Bob   Gun    HR         50000  8           1           4/30/19
7  100      Evan  Turner Finance    95000  8           1           5/31/19
8  200      Ron   Gold   Marketing  80000  9           1           5/31/19
9  300      Bob   Gun    HR         60000  8           1           5/31/19

请注意,埃文·特纳(Evan Turner)如何改变部门并在5月获得了薪水的增加。鲍勃在同月也加薪了

这个想法是表A每月更新一次,我想将此更改记录到新表中。

2 个答案:

答案 0 :(得分:1)

您可以创建如下所示的过程,并在每个月末计划。

CREATE PROCEDURE usp_InsertHistory
AS
BEGIN

IF CAST(GETDATE() AS DATE) = CAST(EOMONTH(GETDATE()) AS DATE)

BEGIN

INSERT INTO HistoryTable
(
  Id
  ,MemberId
  ,First
  ,Last
  ,Department
  ,Salary
  ,Daily_Hours
  ,Active_Flag
  ,Date
)
SELECT   Id
  ,MemberId
  ,First
  ,Last
  ,Department
  ,Salary
  ,Daily_Hours
  ,Active_Flag
  ,GETDATE()
FROM Table

END

END 

答案 1 :(得分:0)

添加一个新列,记录插入行的时间:

alter table t add column createdAt datetime default getdate();

这将自动插入插入日期(向前移动)。