我有一个业务需求,即发票表中的每条记录都有一个看起来像 YYYYNNNNNN 的 ID。
NNNNNN 部分需要在每年年初重新启动。所以 2016 年输入的第一行看起来像 2016000001,第二行看起来像 2016000002 等等。假设 2016 年的最后一条记录是 2016123456,下一行(2017 年)应该看起来像 2017000001
我不需要这个 id 作为主键,我也存储创建日期。这个想法是这个'显示ID'是独一无二的(所以我可以通过它查询)并且可以按年份进行分组。
不太可能删除任何记录;但是,我倾向于防御性地编写代码以防止类似的事情。
有什么方法可以创建这个 id 而不必在每次插入新行时查询今年的最大 id?
想法:
CreateNewInvoiceSP
,它获取MAX
那一年的值(令人讨厌)IDENTITY
orDEFAULT
声明中指定一些 UDF 或其他内容(??)PARTITION OVER + ROW()
(删除会出现问题)INSERT
(仍然需要运行一些MAX
查询:()所有这些都有些不理想。欢迎任何想法或变化!
为什么一个 SQL Server 表不能有多个标识列?
CREATE TABLE t(id INT IDENTITY, id2 INT IDENTITY)
Run Code Online (Sandbox Code Playgroud)
消息 2744,级别 16,状态 2,第 5
行 为表 't' 指定了多个标识列。
每个表只允许一个标识列。
我知道我们可以使用计算列来解决它。
根据产品文档,一张表不能有多个标识列。但为什么?背后的真正原因是什么?