0

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

对于每一行,它将提供一个随机数,但在最近的一种情况下随机生成重复,我怎样才能避免这种情况呢,请指教

4

1 回答 1

1

随机数存在“值重复”的风险,特别是如果您只取随机数的前四位数字。

取而代之的是,生成序列号。要实现这一点,您可以创建一个具有结构的表

file_date | seq_no

Ex: 0907 | 1000
    0907 | 1001

然后每次你想得到一个文件名时,针对这个表查询下一个序列号

select max(seq_no)+1 from <table>
于 2012-07-12T08:43:46.963 回答