我有一个业务需求,即发票表中的每个记录都有一个看起来像YYYYNNNNNN的ID。
NNNNNN部分需要在每年年初重新启动。因此,2016年输入的第一行看起来像2016000001,第二行看起来像2016000002等。假设2016年的最后一条记录是2016123456,下一行(2017年)应该看起来像2017000001
我不需要此ID作为主键,并且我也存储创建日期。这个想法是,这个“显示ID”是唯一的(因此我可以通过它查询),并且可以按年份分组。
任何记录都不太可能被删除;但是,我倾向于针对此类内容进行防御性编码。
有什么方法可以创建此ID,而不必在每次插入新行时都查询今年的最大ID?
想法:
- A CreateNewInvoiceSP,获得当年的MAX值(讨厌)
- 一些神奇的内置功能可以做到这一点(我可以梦到了)
- 能够在IDENTITYorDEFAULT声明(??)中指定一些UDF或其他内容
- 使用的视图PARTITION OVER + ROW()(被删除将是有问题的)
- 触发INSERT(仍然需要运行一些MAX查询:()
- 一年一次的后台工作,用每年插入的MAX来更新一张表格,然后我...有事吗?
所有这些都不理想。任何想法或变化都欢迎!