我希望 SQL Server 有这个功能。它会让很多事情变得更容易。
这是我解决这个问题的方法。
创建一个名为 tblIdentities 的表。在此表中放置一行,其中包含您的最小值和最大值以及应重置序列号的频率。还要输入一个新表的名称(称为 tblMySeqNum)。这样做使得以后添加更多的序列号生成器变得相当容易。
tblMySeqNum 有两列。ID(它是一个 int 标识)和 InsertDate(它是一个默认值为 GetDate() 的日期时间列)。
当你需要一个新的 seq num 时,调用一个插入到这个表中的 sproc 并使用 SCOPE_IDENTITY() 来获取创建的身份。确保您没有超过 tblIdentities 中的最大值。如果你有然后返回一个错误。如果没有返回您的序列号。
现在,要重置和清理。有一项根据需要定期运行的作业,它检查 tblIdentites 中列出的所有表(目前只有一个)以查看它们是否需要重置。如果它们已达到重置值或时间,则在行中列出的表的名称上调用 DBCC IDENT RESEED(此示例中为 tblMySeqNum)。这也是清除该表中您并不真正需要的额外行的好时机。
不要在获得身份的存储过程中进行清理或重新播种。如果这样做,那么您的序列号生成器将根本无法很好地扩展。
正如我所说,SQL Server 中的这个特性会让很多事情变得更容易,但我发现这个工作在功能上相当好。
瓦卡诺