2011-11-21 209 views
0

我試圖在INSERT時爲唯一條目生成一個「客戶」表時生成唯一的「引薦代碼」。我想用默認值約束來做到這一點。生成唯一的隨機數

我的問題是,我如何保證隨機生成的值將是唯一的?我知道我可以這樣做:

SELECT ABS(CAST(CAST(NEWID() AS VARBINARY) AS INT)) AS [ReferralCode] 

會給我一個隨機整數,但我懷疑它是非唯一的。

幫助?

謝謝!

+1

可用的你真的需要隨機編號嗎?或者僞隨機就足夠了? –

+0

僞隨機可能有效嗎? – Ray

回答

3

這就是uniqueidentifier的用途。但是,如果需要int是不行的。 Int32是爲了擁有相當全球獨一無二的價值。

更新:
如果該值只需要在該表中唯一,則只需創建另一列,啓用身份並將種子設置爲某個值即可。

+0

我在想我能做些什麼就是讓ReferralCode列成爲uniqueidentifier數據類型。然後,在它外面寫一個非常簡單的函數,將其轉換爲整數。這總會產生獨特的整數,還是我誤會了? – Ray

+0

@RayBao不會不會。 Se我更新的答案 – Magnus

+0

@ RayBao另一個選項是保存隨機引用號碼。在列中以及生成新的時候,檢查以確保它尚未生成,在這種情況下生成新的。 'SELECT CAST(RAND()* 1000000 AS INT)' – Magnus

0

你可以根據記錄的主鍵(假設爲int)加上一些大數字來使它看起來是隨機的嗎?例如,(CustomerID + 31281923928)。這是如果你不介意值是連續的。

+0

我想這取決於「唯一」的意思。如果它只需要在該表中唯一的值,可以使用pk列。但是,這當然不會是一個全球獨一無二的價值。 – Magnus

+0

是的,它只需要在此表中唯一。我想避免使用主鍵列。 – Ray