0

モジュールの要件に従って、ファイル名の長さは8文字であり、DDMM関数とビューを使用してデータベースから乱数をフェッチしようとする最初の4文字と残りの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

特に乱数の最初の 4 桁のみを取得する場合、乱数の「値の繰り返し」のリスクがあります。

その代わりに、シーケンス番号を生成します。これを実装するには、構造を持つテーブルを作成できます

file_date | seq_no

Ex: 0907 | 1000
    0907 | 1001

次に、ファイル名を取得するたびに、このテーブルに対してクエリを実行して次のシーケンス番号を取得します

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