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