【发布时间】:2019-12-06 14:17:09
【问题描述】:
我正在尝试根据ID(主键列)的值为ProjektNummer(名称)列生成值。
例如,当ID 是142,那么ProjektNummer 应该是19142。 19 表示当前年份,142 是其ID 的值。
现在,当年份发生变化时,项目名称列值中的id部分需要从零重新开始,而实际ID应该跟随标识并像往常一样加1。
所以如果 2019 年的最后一条记录 ID=164,那么 2020 年的第一条记录应该是:
ID: 165 ProjektNummer: 20001
.. 2020 年的第二个记录是:
ID: 166 ProjektNummer: 20002
实现此目的的一种方法是创建一个新视图,例如“vMaxLastId”并存储相应年份的“ID”最大值。该记录将在另一个触发器中用作参考。
因此,如果 2020 年的第一条记录的 ID:165 另一个触发器将在插入新记录后从“ID”的值中减去 2019 年的值 (164)(存储在视图中)在“table1”中使用第二个触发器。 (这应该在插入之前完成)
165-164=1
166-164=2
167-164=3
....
当年份从 2019 年更改为 2020 年时,2020 年的最大 ID 和年份将作为新记录添加到视图中。我已经实现了这一点,但这种方法存在多个问题。
请建议我任何可能的方法来解决这个问题。我愿意对数据库、查询或触发器或整个概念进行任何形式的更改。
【问题讨论】:
-
您可能有一个单独的表,其中包含每年的最大 id,并通过触发器保持最新状态。如果您有大量插入,这可能不是一个有效的解决方案。
标签: sql sql-server database triggers database-trigger