小编典典

TSQL生成5个字符长的字符串,数据库中尚不存在的所有数字[0-9]

sql

最好的方法是什么?

我需要生成一个5位数字长的字符串,其中所有字符都是数字。但是,我需要能够执行“
x”次(用户变量)并将此随机字符串存储在数据库中。此外,我不能两次生成相同的字符串。6个月后,旧弦将被移除。

伪码

DECLARE @intIterator INT,
 @intMax

SET @intIterator = 1
SET @intMax = 5 (number of strings to generate)

WHILE @intIterator <= @intMax
 BEGIN

  -- GENERATE RANDOM STRING OF 5 NUMERIC DIGITS 
   ???

  -- INSERT INTO DB IF DOESN'T ALREADY EXIST 
  INSERT INTO TSTRINGS
  SELECT @RANDOMSTRING

  IF @@ERROR = 0
    SET @intIterator = @intIterator + 1

 END

我知道这可能不是最佳方法,因此请多多指教。但是,真正在寻找有关如何生成数字5长度字符串的想法。


阅读 163

收藏
2021-04-07

共1个答案

小编典典

一体。如果您已经有(100000-@intMax)行仅剩下@intMax排列,则应该找到@intMax剩余值

INSERT TOP (@intMax) MyTable (RndColumn)
SELECT
    RndValue
FROM
    (
    SELECT DISTINCT TOP 100000 -- covers potential range from 00000 to 99999
        RIGHT('00000' + CAST(ABS(CHECKSUM(NEWID())) AS varchar(10)), 5) AS RndValue
    FROM
        sys.columns c1, sys.columns c2
    ) foo
WHERE
    NOT EXISTS (SELECT *
        FROM
            MyTable T
        WHERE
            T.RndColumn = foo.RndValue
2021-04-07