У меня есть бизнес-требование, чтобы каждая запись в таблице счетов имела идентификатор, который выглядит как ГГГГНННННН.
Часть NNNNNN должна перезапускаться в начале каждого года. Итак, первая строка, введенная в 2016 году, будет выглядеть как 2016000001, а вторая как 2016000002 и т. Д. Допустим, последняя запись за 2016 год была 2016123456, Следующая строка (из 2017) должна выглядеть как 2017000001
Мне не нужен этот идентификатор, чтобы быть первичным ключом, и я также храню дату создания. Идея состоит в том, что этот «идентификатор отображения» является уникальным (поэтому я могу сделать запрос по нему) и способен работать с группой людей по годам.
Вряд ли какие-либо записи будут удалены; однако я был бы склонен защищаться от чего-то подобного.
Есть ли способ, которым я мог бы создать этот идентификатор без необходимости запрашивать максимальный идентификатор в этом году каждый раз, когда вставлять новую строку?
Идеи:
- А
CreateNewInvoiceSP, который получаетMAXзначение за этот год (хрен) - Какая-то волшебная встроенная функция для именно этого (я могу мечтать правильно)
- Возможность указать какой-либо UDF или что-то в объявлении
IDENTITYилиDEFAULT(??) - Представление, которое использует
PARTITION OVER + ROW()(удалено будет проблематично) - Триггер включен
INSERT(все равно нужно выполнить какой-тоMAXзапрос :() - Ежегодная справочная работа, обновляемая таблица с MAX для каждого вставленного года, который я тогда ... Что-то ?!
Все это немного не идеально. Любые идеи или варианты приветствуются!