如何在SQL Server中生成字母数字标记?

时间:2010-04-16 14:46:14

标签: sql-server-2005

我希望生成一些字母数字标记。是否有可以生成设定长度令牌的功能?

3 个答案:

答案 0 :(得分:6)

您可以执行此操作,然后获取所需长度的子字符串:

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

,例如八个字符:

select substring(replace(newid(), '-', ''), 1, 8)

答案 1 :(得分:1)

我通过将表中的唯一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字段可以保证令牌是唯一的,并且随机数使得难以猜测。

答案 2 :(得分:0)

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

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

NEWID()函数返回SQL Server生成的Alpha数字ID,您可以按照自己需要的方式使用它。

适合我。