代码之家  ›  专栏  ›  技术社区  ›  Srikar Doddi

如何在sql server中生成字母数字令牌?

  •  2
  • Srikar Doddi  · 技术社区  · 14 年前

    我希望生成soem字母数字标记。是否有一个函数可以生成设置长度标记?

    3 回复  |  直到 11 年前
        1
  •  6
  •   D'Arcy Rittich    14 年前

    你可以这样做,然后取一个子串,无论你需要什么长度:

    select replace(newid(), '-', '')
    

    例如,对于八个字符:

    select substring(replace(newid(), '-', ''), 1, 8)
    
        2
  •  1
  •   Ray    14 年前

    我是通过将表中的唯一id与一个随机数组合来完成此操作的:

    update [table]
      set token = cast([id] as varchar(10)) + cast(cast(round((rand() * 500000000.0), 0) as int) as varchar(10))
    

    调整varchar大小和乘法因子以获得所需的toekn大小。如果需要精确的大小,请使结果字符串太长一点,并使用子字符串设置长度。

    这不是很强的水晶,但它在大多数情况下为我工作。使用表中的id字段可以确保令牌是唯一的,而随机数使猜测变得困难。

        3
  •  0
  •   Cavaleiro    11 年前

    另一个可能的解决方案(对于SQL Server,我认为newid()在其他DBMS中不可用,但使用另一个类似的函数):

    SELECT CONVERT(VARCHAR(10), RIGHT(NEWID(), 5))
    

    函数的作用是:返回一个由sql server生成的字母数字id,您可以根据需要使用它。

    对我很有用。