Ho un requisito aziendale che ogni record nella tabella Fattura abbia un ID che assomiglia a AAAAMMGNNNN.
La parte NNNNNN deve essere riavviata all'inizio di ogni anno. Quindi la prima riga immessa nel 2016 sarebbe simile a 2016000001 e la seconda come 2016000002 ecc. Supponiamo che l'ultimo record per il 2016 sia stato 2016123456, La riga successiva (del 2017) dovrebbe apparire come 2017000001
Non ho bisogno che questo ID sia la chiave primaria e memorizzo anche la data di creazione. L'idea è che questo "ID di visualizzazione" sia unico (quindi posso interrogarlo da esso) e capace di essere utilizzato da gruppi umani, per anno.
È improbabile che qualsiasi record venga cancellato; tuttavia, sarei propenso a codificare sulla difensiva qualcosa del genere.
Esiste un modo per creare questo ID senza dover richiedere l'id massimo quest'anno ogni volta che inserisco una nuova riga?
idee:
- A
CreateNewInvoiceSP
, che ottiene ilMAX
valore per quell'anno (schifo) - Alcune funzionalità magiche integrate per fare esattamente questo (posso sognare bene)
- Essere in grado di specificare un UDF o qualcosa nella dichiarazione
IDENTITY
oDEFAULT
(??) - Una vista che utilizza
PARTITION OVER + ROW()
(eliminata sarebbe problematica) - Un trigger attivato
INSERT
(sarebbe comunque necessario eseguire alcuneMAX
query :() - Un lavoro in background annuale, aggiornato una tabella con il MAX per ogni anno inserito che poi ... Qualcosa ?!
Tutto ciò non è l'ideale. Eventuali idee o variazioni sono benvenute!