相关疑难解决方法(0)

'Id' 格式为:YYYYNNNNNN,NNNNNN 部分每年重新开始

我有一个业务需求,即发票表中的每条记录都有一个看起来像 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,然后我......什么?!

所有这些都有些不理想。欢迎任何想法或变化!

sql-server t-sql

11
推荐指数
2
解决办法
4694
查看次数

为什么一个 SQL Server 表不能有多个 IDENTITY 列?

为什么一个 SQL Server 表不能有多个标识列?

CREATE TABLE t(id INT IDENTITY, id2 INT IDENTITY)
Run Code Online (Sandbox Code Playgroud)

消息 2744,级别 16,状态 2,第 5
行 为表 't' 指定了多个标识列。
每个表只允许一个标识列。

我知道我们可以使用计算列来解决它。

根据产品文档,一张表不能有多个标识列。但为什么?背后的真正原因是什么?

sql-server database-internals identity

7
推荐指数
1
解决办法
6314
查看次数

标签 统计

sql-server ×2

database-internals ×1

identity ×1

t-sql ×1