我希望生成一些字母数字标记。是否有可以生成设定长度令牌的功能?
答案 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,您可以按照自己需要的方式使用它。
适合我。