避免生成重复的随机数
问题描述:
根据模块需求文件名长度为8个字符,为了实现前4个字符DDMM
和剩余的4个字符试图从数据库中使用函数和视图获取随机数字,同样的东西我正在使用的数据库我已经粘贴下面:避免生成重复的随机数
功能:
CREATE FUNCTION [dbo].[GenerateRandomNumbersLetters]
(
@NumberOfCharacters TINYINT
)
RETURNS VARCHAR(32)
AS
BEGIN
RETURN
(
SELECT LEFT(REPLACE([NewID], '-', ''), @NumberOfCharacters)
FROM dbo.RetrieveNewID
);
END
查看:
CREATE VIEW [dbo].[RetrieveNewID]
AS
SELECT [NewID] = NEWID();
我的查询:
select
SUBSTRING(replace(convert(varchar(10), getdate(), 3), '/', ''), 1, 4) +
dbo.GenerateRandomNumbersLetters(4) as FileNamerandomNUM
例:0907CCE7
对于每一行它将提供一个随机数,但在一个场景中最近的随机产生重复的,我如何才能避免这样的情况下也,请指教
答
有对于随机数字有“价值重复”的风险,特别是如果您只取得随机数字的前四位数字。
取而代之的是,生成序列号。实现这一点,你可以创建一个表结构
file_date | seq_no
Ex: 0907 | 1000
0907 | 1001
则每次你想获得一个文件名,对这个表查询下一个序列号
select max(seq_no)+1 from <table>
我认为没有风险你会尝试在一天内生成更多的65536个文件名? – 2012-07-12 08:02:01
是啊,但我想知道一个特定的文件重复最后四位数的随机数,可以在生成时进行交叉检查吗? – user1494292 2012-07-12 08:04:23
为什么要求为文件名生成一个*随机*序列号?为什么不使用简单的序列号码方案?你无法回答任何'安全',因为出于安全考虑,4位数是可笑的小空间。 – 2012-07-12 08:22:20