MS SQL: Как сделать автоматическую нумерацию в таблице, и начинать заново в зависимости от текущего года
Имеется такая таблица, которая используется для регистрации отчётов
CREATE TABLE LVD.dbo.SampleReports (
ID INT IDENTITY,
ReportNum INT NULL, //номер отчёта
ReportDate DATE NULL, //дата отчёта
CONSTRAINT PK_SampleReports_SampleReportID PRIMARY KEY CLUSTERED (SampleReportID)
) ON [PRIMARY]
GO
Как сделать, чтобы в столбец ReportNum при создании записи автоматически присваивался порядковый номер, при этом, чтобы при смене года в ReportDate (например закончился 2022 начался 2023) нумерация начиналась снова с 1.
Ответы (2 шт):
Автор решения: Vitaliy Zlobin
→ Ссылка
Можно завести вьюшку, в которой будет такой столбец:
ROW_NUMBER() OVER(PARTITION BY YEAR(ReportDate) ORDER BY Id) AS ReportNum
Автор решения: Виктор Карев
→ Ссылка
Мне кажется, это не следует делать средствами SQL. Лучше это сделать на уровне контроллера, который создаёт отчёты.
- Начать транзакцию.
- Запросить максимальный номер отчёта за текущий год.
- Увеличить на 1 (если нет, то проставить 1).
- Записать отчёт с новым номером.
- Закрыть транзакцию.
Если делать на уровне SQL, то размывается логика продукта.