我有一个业务需求,即发票表中的每条记录都有一个看起来像 YYYYNNNNNN 的 ID。
NNNNNN 部分需要在每年年初重新启动。所以 2016 年输入的第一行看起来像 2016000001,第二行看起来像 2016000002 等等。假设 2016 年的最后一条记录是 2016123456,下一行(2017 年)应该看起来像 2017000001
我不需要这个 id 作为主键,我也存储创建日期。这个想法是这个'显示ID'是独一无二的(所以我可以通过它查询)并且可以按年份进行分组。
不太可能删除任何记录;但是,我倾向于防御性地编写代码以防止类似的事情。
有什么方法可以创建这个 id 而不必在每次插入新行时查询今年的最大 id?
想法:
CreateNewInvoiceSP
,它获取MAX
那一年的值(令人讨厌)IDENTITY
orDEFAULT
声明中指定一些 UDF 或其他内容(??)PARTITION OVER + ROW()
(删除会出现问题)INSERT
(仍然需要运行一些MAX
查询:()所有这些都有些不理想。欢迎任何想法或变化!