如何对每个 uuid 的每个插入行增加 1 计数器列
How to increment a Couner column by 1 with each inserted row BUT per each guid
对于笨拙的标题表示歉意,请随时提出改进建议。
我有一个 table Records 并且有一个 UserId 列指的是谁做了证词。还有 Counter 列,它是 identity(1,1) (重要的是要记住它与 Id 是主键的列)。
当我们开始从不同的账户存款时,问题变得很明显,因为以前,用户可以要求记录编号 123 到 127,得到 5 个金额,但现在,他们的选择可能是 123、125、126 甚至更糟 -什么都没有。
据我所知,处理它的唯一选择是创建一个业务逻辑层,检查用户的最高存款计数器并添加新记录,该记录增加一。
但让它自动工作肯定会很好。类似于 identity(1,1,guid)。可能吗?
要维护这样的列,您需要一个触发器。
您可以考虑在查询 table 时计算该值:
select r.*, row_number() over (partition by guid order by id) as seqnum
from records r;
The only option to handle it as far I can imagine to create a business
logic layer that checks for the highest deposition counter for a user
and adds the new record with that increased by one.
是时候学习了。
- 将最后给定的号码添加到帐户 table。
- 使用触发器在 SQL 服务器的插入事件中分配更高的数字。
完成。这显然假设您的关系数据库以关系方式使用,因此记录与用户相关 table,而不仅仅是持有用户 ID(这将是一个糟糕的设计)。
如果没有,您还可以通过所述触发器维护所有可见 GUID 的 table。
对于笨拙的标题表示歉意,请随时提出改进建议。
我有一个 table Records 并且有一个 UserId 列指的是谁做了证词。还有 Counter 列,它是 identity(1,1) (重要的是要记住它与 Id 是主键的列)。
当我们开始从不同的账户存款时,问题变得很明显,因为以前,用户可以要求记录编号 123 到 127,得到 5 个金额,但现在,他们的选择可能是 123、125、126 甚至更糟 -什么都没有。
据我所知,处理它的唯一选择是创建一个业务逻辑层,检查用户的最高存款计数器并添加新记录,该记录增加一。
但让它自动工作肯定会很好。类似于 identity(1,1,guid)。可能吗?
要维护这样的列,您需要一个触发器。
您可以考虑在查询 table 时计算该值:
select r.*, row_number() over (partition by guid order by id) as seqnum
from records r;
The only option to handle it as far I can imagine to create a business logic layer that checks for the highest deposition counter for a user and adds the new record with that increased by one.
是时候学习了。
- 将最后给定的号码添加到帐户 table。
- 使用触发器在 SQL 服务器的插入事件中分配更高的数字。
完成。这显然假设您的关系数据库以关系方式使用,因此记录与用户相关 table,而不仅仅是持有用户 ID(这将是一个糟糕的设计)。
如果没有,您还可以通过所述触发器维护所有可见 GUID 的 table。