2010-04-16 37 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服務器,您可以以您需要的方式使用。

適合我。