2015-06-17 50 views
2

現在我有一個表成員的表主鍵「id」作爲自動遞增。唯一的隨機整數作爲主鍵ID而不是自動增量

我想要的,而不是自動遞增,這將產生的5-6數字一個隨機整數,並將該爲「ID」。由於每個'id'是主鍵,所以生成的int將是唯一的。在sql server上實現這個任何想法都會有所幫助。

+5

爲什麼你想呢?索引一個標識列要好得多,然後索引一個隨機排列的int列。你應該考慮在你的表中添加一個新的列,它將用一個唯一的約束來保存隨機的int數。 –

+0

@ZoharPeled謝謝你的回答。其實我想分配一個成員獨特的隨機ID,以便他不能猜測任何其他成員的ID。我想添加一個新列,但是在我的軟件中,這個id列與其他許多表相關,所以我想如果有任何解決方案可以幫助解決這個問題。 – sumit

+0

如果你只有5到6位數字,那麼暴力破解另一個有效的身份證並不難。如果你真的想要唯一性,沒有人會匆忙猜測,那麼你應該考慮GUID。如果您生成真正隨機的,將會有性能損失。 – DeanOC

回答

0

嘗試使用如下RAND函數生成6位隨機數

select ceiling(RAND()*1000000) 
+0

我正在尋找自動生成的隨機ID作爲默認,因爲現在我有自動增量索引,而不是自動增量我想隨機整數。 – sumit

0

您可以使用CHECKSUMNEWID(),並把它作爲一個DEFAULT這樣。

SELECT ABS(CHECKSUM(NEWID())) % 100000 

% 100000如果要限制數量爲最多5位是可選的。

注意:隨機生成的聚簇鍵會在插入過程中導致頁面拆分。

0

爲了避免猜測用戶的總數,只需在創建數據庫時添加一個隨機值作爲初始值。

CREATE TABLE users 
(
    ID int identity (7854, 7), 
) 

當還指定增量值大於1時,您當然會忽略值。用預期的記錄數檢查數值範圍。

另一個更好的選擇是隱藏用戶的主鍵,如果他們需要看到某些標識,他們應該看到一個與主鍵分開的值。向表中添加另一個值,稱爲「可見ID」或其他值。

0
CREATE TABLE NEWID_TEST 
(
ID UNIQUEIDENTIFIER DEFAULT NEWID() PRIMARY KEY, 
TESTCOLUMN CHAR(2000) DEFAULT REPLICATE('X',2000) 
) 
GO 

- 或使用

CREATE TABLE NEWSEQUENTIALID_TEST 
(
ID UNIQUEIDENTIFIER DEFAULT NEWSEQUENTIALID() PRIMARY KEY, 
TESTCOLUMN CHAR(2000) DEFAULT REPLICATE('X',2000) 
) 
GO