У меня есть таблица работодателей (Таблица 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 обновляется один раз в месяц, и я хочу записать это изменение в новую таблицу.

0
AGuyHasNoName 30 Май 2019 в 16:20

2 ответа

Лучший ответ

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

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
Dheerendra 30 Май 2019 в 13:27

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

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

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

0
Gordon Linoff 30 Май 2019 в 14:03
56379170