У мене є вимога бізнесу, щоб кожен запис у таблиці рахунків-фактур мав ідентифікатор, який виглядає як YYYYNNNNNN.
Частина NNNNNN потребує перезавантаження на початку кожного року. Отже, перший рядок, введений у 2016 році, виглядатиме як 2016000001, а другий - 2016000002 тощо. Скажімо, останній запис за 2016 рік був 2016123456, Наступний рядок (2017 року) повинен виглядати як 2017000001
Мені не потрібно, щоб цей ідентифікатор був основним ключем, і я також зберігаю дату створення. Ідея полягає в тому, що цей "ідентифікатор відображення" є унікальним (так що я можу запитувати його) та здатним до групи людей за роками.
Навряд чи будь-які записи будуть видалені; проте я б схильний кодувати захистно проти чогось подібного.
Чи є спосіб, щоб я міг створити цей ідентифікатор, не маючи запиту про максимальний ідентифікатор цього року кожен раз, коли вставляти новий рядок?
Ідеї:
- A
CreateNewInvoiceSP
, який отримуєMAX
значення за цей рік (yucky) - Якась магічна вбудована функція для саме цього (я можу мріяти правильно)
- Можливість вказати деякі UDF або щось у
IDENTITY
абоDEFAULT
декларації (??) - Вид, який використовує
PARTITION OVER + ROW()
(видалення буде проблематичним) - Тригер увімкнено
INSERT
(все одно потрібно буде виконати деякийMAX
запит :() - Щорічне фонове завдання, оновлено таблицю з MAX для кожного року, що вставляється, я потім ... Щось ?!
Все це трохи не ідеально. Будь-які ідеї чи варіації вітаються, хоча!