現在我有一個表成員的表主鍵「id」作爲自動遞增。唯一的隨機整數作爲主鍵ID而不是自動增量
我想要的,而不是自動遞增,這將產生的5-6數字一個隨機整數,並將該爲「ID」。由於每個'id'是主鍵,所以生成的int將是唯一的。在sql server上實現這個任何想法都會有所幫助。
現在我有一個表成員的表主鍵「id」作爲自動遞增。唯一的隨機整數作爲主鍵ID而不是自動增量
我想要的,而不是自動遞增,這將產生的5-6數字一個隨機整數,並將該爲「ID」。由於每個'id'是主鍵,所以生成的int將是唯一的。在sql server上實現這個任何想法都會有所幫助。
嘗試使用如下RAND函數生成6位隨機數
select ceiling(RAND()*1000000)
我正在尋找自動生成的隨機ID作爲默認,因爲現在我有自動增量索引,而不是自動增量我想隨機整數。 – sumit
您可以使用CHECKSUM
與NEWID()
,並把它作爲一個DEFAULT
這樣。
SELECT ABS(CHECKSUM(NEWID())) % 100000
% 100000
如果要限制數量爲最多5位是可選的。
注意:隨機生成的聚簇鍵會在插入過程中導致頁面拆分。
爲了避免猜測用戶的總數,只需在創建數據庫時添加一個隨機值作爲初始值。
CREATE TABLE users
(
ID int identity (7854, 7),
)
當還指定增量值大於1時,您當然會忽略值。用預期的記錄數檢查數值範圍。
另一個更好的選擇是隱藏用戶的主鍵,如果他們需要看到某些標識,他們應該看到一個與主鍵分開的值。向表中添加另一個值,稱爲「可見ID」或其他值。
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
爲什麼你想呢?索引一個標識列要好得多,然後索引一個隨機排列的int列。你應該考慮在你的表中添加一個新的列,它將用一個唯一的約束來保存隨機的int數。 –
@ZoharPeled謝謝你的回答。其實我想分配一個成員獨特的隨機ID,以便他不能猜測任何其他成員的ID。我想添加一個新列,但是在我的軟件中,這個id列與其他許多表相關,所以我想如果有任何解決方案可以幫助解決這個問題。 – sumit
如果你只有5到6位數字,那麼暴力破解另一個有效的身份證並不難。如果你真的想要唯一性,沒有人會匆忙猜測,那麼你應該考慮GUID。如果您生成真正隨機的,將會有性能損失。 – DeanOC