如果您添加一條新記錄,然後刪除該記錄,然後反覆添加它,遲早,當您添加一個新記錄的整數主鍵ID時,它最終將超過20億次。主鍵ID超過極限時會發生什麼?
現在會發生什麼? SQL Server將再次從1開始主鍵ID?或-1?
如果它循環40億次會發生什麼; SQL Server如何知道不會取代以前的數據?
如果您添加一條新記錄,然後刪除該記錄,然後反覆添加它,遲早,當您添加一個新記錄的整數主鍵ID時,它最終將超過20億次。主鍵ID超過極限時會發生什麼?
現在會發生什麼? SQL Server將再次從1開始主鍵ID?或-1?
如果它循環40億次會發生什麼; SQL Server如何知道不會取代以前的數據?
你得到一個錯誤,如果identity
將超過使你的問題沒有實際意義的,其餘的數據類型的邊界。您可以通過
CREATE TABLE #T
(
id INT IDENTITY(2147483647,1)
)
INSERT INTO #T
DEFAULT VALUES
INSERT INTO #T
DEFAULT VALUES /*Arithmetic overflow error converting IDENTITY to data type int.*/
GO
SELECT * FROM #T
DROP TABLE #T
Martin如果發生這種情況,SQL Server開發人員應該怎麼做? – user960567 2014-05-15 06:35:54
@ user960567在大多數情況下,請將數據類型更改爲允許更大的數字。在某些情況下,你可以考慮重編現有行並重置標識種子,但這通常應避免(鍵都應該被認爲是不可改變的,沒有改變或回收一般來說) – 2014-05-16 18:04:22
馬丁謝謝.. – user960567 2014-05-16 18:43:52
使用BIGINT看到這一點,你可能永遠不會達到極限。
嗯...身份可以設置開始*真高*烏 – 2011-03-14 23:07:04
使用[唯一標識符/ GUID](http://msdn.microsoft.com/en-us/library/ms187942.aspx) – CraigTP 2011-10-06 12:52:46
您可以隨時更改你的'ID'數據類型爲'BIGINT',你會得到+/- 9百萬的三次方(也就是** 9張十億數十億** !!!!!)值.....應該足夠**相當長一段時間**! – 2011-03-14 22:17:23
甚至更好地使用[唯一標識符/ GUID](http://msdn.microsoft.com/en-us/library/ms187942.aspx),當宇宙爆炸時,您只會用完值! :) – CraigTP 2011-10-06 12:53:56
請注意,不同的DBMS之間的行爲有所不同。這個問題用MS SQL Server標記,所以沒有任何混淆,但如果問題包含「其他DBMS呢?」那麼你最終會得到不同平臺的不同答案。 – 2012-05-26 23:28:57