J'ai une exigence commerciale selon laquelle chaque enregistrement dans la table des factures a un identifiant qui ressemble à YYYYNNNNNN.
La partie NNNNNN doit redémarrer au début de chaque année. Ainsi, la première ligne entrée en 2016 ressemblerait à 2016000001 et la seconde à 2016000002 etc. Disons que le dernier record pour 2016 était 2016123456, la ligne suivante (de 2017) devrait ressembler à 2017000001
Je n'ai pas besoin que cet identifiant soit la clé primaire et je stocke également la date de création. L'idée est que cet «ID d'affichage» est unique (donc je peux l'interroger) et qu'il peut être groupé humain, par année.
Il est peu probable que des enregistrements soient supprimés; cependant, je serais enclin à coder défensivement contre quelque chose comme ça.
Existe-t-il un moyen de créer cet identifiant sans avoir à demander l'id max cette année à chaque fois que vous insérez une nouvelle ligne?
Idées:
- A
CreateNewInvoiceSP
, qui obtient laMAX
valeur de cette année (ouais) - Quelques fonctionnalités magiques intégrées pour faire exactement cela (je peux rêver correctement)
- Pouvoir spécifier un UDF ou quelque chose dans la déclaration
IDENTITY
orDEFAULT
(??) - Une vue qui utilise
PARTITION OVER + ROW()
(supprimée serait problématique) - Un déclencheur activé
INSERT
(aurait encore besoin d'exécuter uneMAX
requête :() - Un travail de fond annuel, mis à jour un tableau avec le MAX pour chaque année inséré que j'ai ensuite ... Quelque chose?!
Tout cela est un peu non idéal. Toutes les idées ou variations sont les bienvenues!