2009-02-16 68 views
1

在SQL数据库中每天创建新序列号序列的好方法是什么?每天新鲜的SQL序列

类似于某些数据库系统中整数列的自动递增功能。

我正在创建/记录交易,并且交易由双'日期,序列号'标识。

+0

正常(单调递增)序列号有什么问题? – kmkaplan 2009-02-16 19:45:51

+0

这是用于包含日期+序列号的证书。鉴于日期每隔几个小时更改一次,我不需要序列号这么大的插槽。我试图保存每一个角色。 – 2009-02-17 02:01:23

回答

0

最好的方法是使用日期作为数字的一部分,例如今天有080216001到080216999。你可以有不连续的号码吗?

1

这取决于你有什么样的数据库。如果您可以访问全局变量或生成器,则每天重置它并使用它来为序列号列生成种子。如果没有,您可以将该值存储在一个表格中,然后查看它以对列进行种子处理,每天重新设置一次。

如果有必要,不要忘记手动增加种子。 (发生器是一种特殊的全局变量,可以自动增加自己,如果设置的话,其他变量和表格中的记录肯定不会)

要重置该值,只需在插入时设置一个触发器检查COUNT(DATE = today)是否为0.如果是,则重置该值。

1

为了这个目的,特定表格如何?

create table AvailableSerialNumbers (
    AvailableOn datetime primarykey, 
    NextAvailableNumber int 
) 

你不得不提前填充此,但这是非常直接的(确保这是手动自动,而不是完成)。

请注意,如果您在创建大量序列号记录的同时创建逻辑将更新AvailbleSerialNumbers记录的瓶颈。解决这个问题最简单的方法是每天定义多个AvailableSerialNumbers记录(比如说100个),然后随机选择1来更新。如果使用这种方法,而不是“NextAvailableNumber”字段,它应该是从/到范围。当范围命中时,删除范围记录。