如果您选择的增量不是 1000000 的因数,那么您可以取该数字的最后 6 位数字来提供 ID;即(IDENTITY (1,7)) % 1000000。
但是您的竞争对手仍然可以通过几次连续注册找到增量,因此这并不能完全解决问题。
因此,您似乎想要一个完全随机的数字 - 为此,您必须在生成它时检查它是否已经存在,或者预先生成一个数字列表,对它们进行随机排序,然后选择创建新客户时的下一个。
如果您可以找到或创建适当的算法来创建足够短的输出,则需要考虑的另一个选项是某种形式的加密。
如果您采用较大的非因子增量路线,您可以随后重新排列数字的顺序以创建一个更随机的数字 - 例如;
declare @inc int , @loop int
declare @t table (i int, cn int, code varchar(4))
select @inc = 5173, @loop = 1
while @loop<=10000
begin
insert @t (i, cn)
select @loop, (@inc*@loop)%10000
select @loop = @loop + 1
end
update @t
set code = substring(convert(varchar(4),cn),2,1)
+ substring(convert(varchar(4),cn),4,1)
+ substring(convert(varchar(4),cn),3,1)
+ substring(convert(varchar(4),cn),1,1)
select code, count(*) from @t group by code having count(*)>1
select top 20 * from @t order by i
根据您选择的数字,一些连续的项目之间会有相同的差异,但这个数字会有所不同。所以它不是加密安全的,但可能足以挫败除了最坚定的竞争对手之外的所有竞争对手。
您可以将上述内容转换为一个函数以运行标准 IDENTITY(1,1) id 字段