gpt4 book ai didi

sql - 如何创建智能 key ,该 key 将在月底重置其自动增量值

转载 作者:行者123 更新时间:2023-12-01 19:39:53 25 4
gpt4 key购买 nike

我目前正在开发一个石油分配管理项目,我需要将每张账单的收据存储在数据库中。我正在考虑为收据构建一个智能 key ,其中包含城市的前 2 个字母、加油站 ID、自动增量号、月份的第一个字母和年份的最后 2 位数字。所以它会有点像这样:“AA-3-0001-J15”。我想知道如何让AI号码在月份变化时回到0001。有什么建议吗?

最佳答案

回答直接问题 - 如何让数字在月初从 1 重新开始。

由于它不是一个简单的 IDENTITY 列,因此您必须自己实现此功能。

要生成如此复杂的值,您必须编写用户定义的函数或存储过程。每次您需要键的新值以在表中插入新行时,您都将调用此函数或执行此存储过程。

在函数/存储过程中,您必须确保当两个不同的 session 尝试同时插入行时它能够正常工作。一种可能的方法是使用 sp_getapplock .

您没有澄清“自动增量”编号是否是所有城市和加油站的单一序列,或者每个城市和加油站是否都有自己的编号序列。假设我们希望获得同一个月内所有城市和加油站的单一数字序列。当月份改变时,序列重新开始。

运行该过程时,它应该能够回答以下问题:我尝试插入的行是当月的第一行吗?如果生成的值是当月的第一个值,则计数器应重置为 1。

回答这个问题的一种方法是有一个辅助表,每个月有一行。第一列 - 日期,第二列 - 序列的最后一个数字。一旦你有了这样的辅助表,你的存储过程就会检查:当前月份是几号?本月生成的最后一个数字是多少?如果辅助表中存在这样的数字,则将其在辅助表中递增并使用它来组成 key 。如果辅助表中不存在这样的数字,则插入 1 并用它来组成 key 。

最后,我不建议将此复合值作为表的主键。用户需求不太可能说“像这样设置表的主键”。这取决于你如何在内部处理它,只要会计师可以在他的报告和用户界面中看到交易旁边的这组神奇的字母和数字。会计师不知道什么是“主键”,但你知道。而且您知道如何将几个城市、加油站等表连接在一起,以从标准化数据库中获取所需的信息。

哦,顺便说一句,您每月的交易量迟早会超过 9999 笔。

关于sql - 如何创建智能 key ,该 key 将在月底重置其自动增量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28135280/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com