Tenho um requisito comercial de que cada registro na tabela Fatura tenha um ID parecido com YYYYNNNNNN.
A parte NNNNNN precisa ser reiniciada no início de cada ano. Portanto, a primeira linha inserida em 2016 se pareceria com 2016000001 e a segunda como 2016000002 etc. Vamos dizer que o último registro para 2016 foi 2016123456, a próxima linha (de 2017) deve ser 2017000001
Não preciso que esse ID seja a chave primária e também armazeno a data de criação. A ideia é que esse 'ID de exibição' seja único (para que eu possa consultar) e capaz de agrupar pessoas por ano.
É improvável que quaisquer registros sejam excluídos; no entanto, eu estaria inclinado a codificar defensivamente contra algo assim.
Existe alguma maneira de criar esse ID sem precisar consultar o ID máximo este ano toda vez que inserir uma nova linha?
Ideias:
- A
CreateNewInvoiceSP
, que obtém oMAX
valor para esse ano (nojento) - Algum recurso mágico incorporado para fazer exatamente isso (eu posso sonhar direito)
- Ser capaz de especificar alguma UDF ou algo na declaração
IDENTITY
ouDEFAULT
(??) - Uma exibição que usa
PARTITION OVER + ROW()
(excluída seria problemática) - Um gatilho ativado
INSERT
(ainda seria necessário executar umaMAX
consulta :() - Um trabalho anual anterior, atualizava uma tabela com o MAX para cada ano inserido, que eu então ... Algo ?!
Todos os quais são um pouco não ideais. Todas as idéias ou variações são bem-vindas!