У меня есть таблица с именем «Таблица1», в которой есть столбец первичного ключа с именем ID и столбец с именем CreatedAt типа date.
У меня есть другая таблица с именем «MaxLastId», в которой я хочу сохранить максимальное значение ID «Table1» при изменении года с использованием триггера AFTER INSERT.
Например, если данные Table1:
ID | CreatedAt
16 | 31-Dec-2019
17 | 01-Jan-2020
... Данные таблицы MaxLastId должны стать:
maxId
16
Поскольку 16 - это значение ID последней строки, вставленной в 2019 году. То же самое должно произойти для 2020, 2021 года и так далее.
Таблица MaxLastId должна содержать только одну строку. Через год будет обновляться единственная строка в MaxLastId.
Что я пробовал до сих пор:
CREATE TRIGGER [dbo].[SaveLastYearMaxId]
ON Table1
AFTER INSERT
AS
BEGIN
IF NOT EXISTS (SELECT * FROM MaxLastId)
BEGIN
IF (SELECT DATEDIFF(yy,(SELECT CreatedOn from inserted), (SELECT MAX(id) FROM Table1 WHERE id <(SELECT MAX(id) FROM Table1)))) = 1
-- ( max - second max as first max is 'inserted' already)
BEGIN
INSERT INTO MaxLastId SELECT id from inserted
END
END
ELSE
BEGIN
IF (SELECT DATEDIFF(yy,(SELECT CreatedOn from inserted), (SELECT CreatedOn from Table1 where id = (Select [maxId] from MaxLastId)))) = 1
BEGIN
UPDATE MaxLastId SET [maxId] = (SELECT id from inserted)
END
END
END
У меня есть вопросы:
- Сработает ли этот триггер? Если да, можно ли лучше написать этот триггер?
- Есть ли лучший подход к решению этой проблемы?
Я не очень хорошо разбираюсь в триггерах SQL.