Я хотел бы обновить вставленную запись (из веб-приложения) с некоторым порядковым номером, который сбрасывается каждый год. Он должен иметь форму 1/2019, 2/2019, 1/2020 и т. Д.
Первое решение, которое я принял, заключалось в использовании триггера при действии вставки.
CREATE TRIGGER GenerateActivityNumber
ON dbo.Activity
AFTER INSERT
AS
BEGIN
update Activity set Activity.ActivityNumber = CONCAT(NEXT VALUE FOR ActivityCounter, '/', YEAR(GETDATE())) WHERE Activity.id = (select Id from inserted)
END
Кажется хорошимно я не вижу никакого способа сброса последовательности, кроме использования задания, которое выполняется каждый год. Вторая идея была очень простой, но она не очень безопасна (риск дублирования) - подсчет записей за текущий год и увеличение значения (все еще внутри триггера)
select MAX(id)+1 from activity where YEAR(CreatedDate) = YEAR(GETDATE())
Есть ли у вас идеи, как улучшить решения, показанные выше? Или есть другие лучшие решения?