Tengo un requisito comercial de que cada registro en la tabla Factura tenga una identificación que se parezca a YYYYNNNNNN.
La parte NNNNNN necesita reiniciarse al comienzo de cada año. Entonces, la primera fila ingresada en 2016 se vería como 2016000001 y la segunda como 2016000002, etc. Digamos que el último registro para 2016 fue 2016123456, La siguiente fila (de 2017) debería verse como 2017000001
No necesito esta identificación para ser la clave principal y también almaceno la fecha de creación. La idea es que este 'ID de pantalla' es único (por lo que puedo consultar por él) y apto para grupos humanos, por año.
Es poco probable que se eliminen los registros; sin embargo, me inclinaría a codificar defensivamente contra algo así.
¿Hay alguna forma de que pueda crear esta identificación sin tener que consultar la identificación máxima este año cada vez que inserte una nueva fila?
Ideas:
- A
CreateNewInvoiceSP, que obtiene elMAXvalor para ese año (asqueroso) - Alguna característica mágica incorporada para hacer exactamente esto (puedo soñar bien)
- Ser capaz de especificar algún UDF o algo en la declaración
IDENTITYoDEFAULT(??) - Una vista que usa
PARTITION OVER + ROW()(eliminada sería problemática) - Un activador activado
INSERT(aún necesitaría ejecutar algunaMAXconsulta :() - Un trabajo de fondo anual, actualizó una tabla con el MAX para cada año insertado que luego ...
Todos los cuales son un poco no ideales. Sin embargo, cualquier idea o variación es bienvenida.