【问题标题】:generate unique random number and insert it in a column avoiding collision生成唯一的随机数并将其插入列中以避免冲突
【发布时间】:2015-09-10 16:40:34
【问题描述】:

嗨,我想知道你们推荐我做什么,每天生成一个随机数并避免碰撞。这个数字应该被插入到一个列中,这是我的架构:

id amount paymentmethod docnumber
1  12.00  cash          123456 (should be the same for all records in that day)
2  15.00  creditcard    123456
3  10.00  cash          123456

所以在 docnumber 列中,我试图实现的是每天生成一个唯一的数字,因为每天我都会清空表格,表格将填充 N 个值,所以接下来一天应该是这样的:

id amount paymentmethod docnumber
1  12.00  cash          789013 (should be the same for all records in that day)
2  15.00  creditcard    789013

所以今天我可以在表中有 10 条记录,但在列 docnumber 中将始终是相同的随机数,然后明天我将有示例 5 条记录,但列 docnumber 仍然会有另一个随机数,但在所有记录中,我怎样才能做到这一点?

非常感谢。

【问题讨论】:

  • 你是说你每天都清空表,但你需要为每一天使用一个新值?
  • 为什么不直接使用日期作为 YYYYMMDD 呢?
  • 是的,因为在我使用的系统中,最终我会将所有记录保存在软件中,但会要求一个唯一的 docnum,所以今天我使用 1234 明天我不能使用相同的 docnum
  • @GordonLinoff 可能是最好的建议。另一种选择是创建一个日期表并在其中填充未来 x 年或其他任何日期的所有日期,并在该表中生成一个唯一的文档编号,您可以每天参考。
  • 无论是在插入它们时还是作为更新语句。

标签: sql sql-server random


【解决方案1】:

一种选择是创建一个具有给定日期 ID 的表并每天从中删除 Id。

    create table #IdTrack
    (
     tdate DATE
    ,ID uniqueidentifier
    )
    INSERT INTO #IdTrack
    SELECT
    CONVERT(DATE,GETDATE()) ,NEWID()
    GO
    Create Procedure IdTrack 
    As
    Begin
         DELETE FROM
         #IdTrack
         where DATEDIFF(day,tdate,GETDATE())>1
    End

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    • 2018-03-01
    相关资源
    最近更新 更多