2010-04-16 36 views

回答

5

你可以做到这一点,然后利用它的一个子什么长度,你需要:

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

例如,为八个字:

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

我已经通过整合独特的ID这样做从表中用随机数:

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

调整varchar的大小和乘法因子得到你需要的尺寸。如果你需要一个精确的大小,使得产生的字符串有点太长,并使用substring来设置长度。

这不是crytographically强,但它在大多数情况下适用于我。使用表中的id字段保证令牌是唯一的,并且随机数很难猜测。

0

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

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

的NEWID()函数返回由SQL生成的字母数字ID服务器,您可以以您需要的方式使用。

适合我。