Дизайн базы данных для исторической таблицы - PullRequest
0 голосов
/ 30 мая 2019

У меня есть таблица работодателей (Таблица 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

Обратите внимание, как Эван Тернер сменил отдел и получил повышение зарплаты в мае месяце. Боб получил повышение зарплаты в том же месяце

Идея состоит в том, что таблица A обновляется один раз в месяц, и я хочу записать это изменение в новую таблицу.

Ответы [ 2 ]

1 голос
/ 30 мая 2019

Вы можете создать процедуру, как показано ниже, и планировать ее на конец каждого месяца.

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 
0 голосов
/ 30 мая 2019

Добавить новый столбец, который записывает, когда вставляется строка:

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

Это будет автоматически заполнено датой вставки (движение вперед).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...