沉梦昂志151 2021-07-26 23:44 采纳率: 75%
浏览 61
已结题

SQL SERVER同一个表中,流水号根据不同条件进行编号?

假设一个数据库表中有10中类型商品,每个商品的流水号是独立的,比如新增2个A商品的流水号为0001和0002,新增1个B商品流水号从0001开始,之后又新增1个A商品,流水号从0003开始,再新增1个B商品流水号从0002开始,之后又新增1个C商品,流水号从0001开始。

  • 写回答

3条回答 默认 最新

  • CSDN专家-文盲老顾 2021-07-27 09:38
    关注

    这种自动编号,有一个最大的问题,就是数据行物理删除后,序号的问题,比如现在有 a001,a002,a003,如果物理删除了 a002,再次插入,应该是 a004,而不是通过count得到的a003,如果删除了 a003,再次插入,也应该是 a004,而不是 根据当前最大序号计算出来的 a002+1得到的a003

    所以,最好的办法,是做一个冗余表,专门用来计算和存储序号,表结构可以是这样

    id,商品类型,流水号年份,商品流水对应的流水id

    然后根据流水id,获得这个序号表中对应行的 row_number 结果,并与年份组合成流水号,只要这个表的数据不物理删除,即不会出现其他问题

    所以,整个方案是:建立一个流水号表,建立一个根据流水ID获取流水号的自定义函数,建立一个触发器,禁止流水号表的修改和删除

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月9日
  • 已采纳回答 8月1日
  • 创建了问题 7月26日