避免生成重复的随机数

时间:2012-07-12 07:54:13

标签: sql-server sql-server-2008

根据模块要求文件名长度为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

对于每一行它都会提供一个随机数,但在最近的一个场景中随机生成重复项,我怎样才能避免这种情况,请提出建议

1 个答案:

答案 0 :(得分:1)

存在值重复的风险'对于随机数,特别是如果你只取一个随机数的前四位数。

而不是那样,生成序列号。要实现这一点,您可以创建一个结构

的表
file_date | seq_no

Ex: 0907 | 1000
    0907 | 1001

然后每次要获取文件名时,请在此表中查询下一个序列号

select max(seq_no)+1 from <table>
相关问题