gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:45:06 25 4
gpt4 key购买 nike

执行此操作的最佳方法是什么?

我需要生成一个 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 长度字符串的想法。

最佳答案

“显而易见”的方式可以描述为“key = random; while (key already selected) { key = random }”。它有效,但是 birthday paradox意味着我们的键冲突几率与已经使用的键数成正比,以惊人的指数速率增加。因此,选择一个随 secret 钥对于每个新 key 平均花费的时间呈指数增长,并且很可能最终陷入无限或任意长的循环。

最好按如下方式预先生成 key 列表:

  • 拿着 table UniqueKeys包含所有预先计算的字符串 '00000' .. '99999' 除了 keyOrder始终初始化为 newId() 的字段在插入。 keyOrder应该被编入索引。

  • 当你需要“生成”一个字符串时,你可以SELECT TOP 1 <code>key</code> FROM UniqueKeys ORDER BY keyOrder ,这将在几乎恒定的时间内拉出下一个可用 key 。现在您有了 key ,您可以从 UniqueKeys 中删除它以防止它被重复使用。

  • 每六个月,截断并重新生成您的 UniqueKeys表。

这种风格的优点是实现相对简单,生成下一个键的时间几乎恒定,并且避免了上述令人讨厌的“检查是否存在于循环中”的情况。

关于sql - TSQL 生成 5 个字符长度的字符串,数据库中不存在的所有数字 [0-9],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1527938/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com