2014-06-25 57 views
0

將IDENTITY轉換爲數據類型int的算術溢出錯誤。插入一行時出現「算術溢出」錯誤

當試圖將記錄插入到具有656128行的表中時,出現此錯誤。我在這個表中的最大ID是1186183.這看起來不像是會導致這個錯誤的數字。 ID列是int類型,不是null。身份,身份增量和身份種子都是如此。

關於可能導致此問題的任何想法?

insert into table (m_id, from_zip, to_zip) 
values (7788, '98565', '96552') 

schema 
id (int, not null) 
m_id (int null) 
from_zip (nvarchar(50), null) 
to_zip (nvarchar(50), null) 
+0

請顯示您的插入代碼,最好是表格模式。 – JiggsJedi

+0

將數據類型更改爲long? – StrawHara

+2

僅僅因爲最大id是一個值並不意味着與下一個要分配的身份有關。通過執行這個來檢查最後一個是什麼:SELECT IDENT_CURRENT('table') – nickles80

回答

2

該錯誤只應被視爲下一個身份是超越2​​147483647

整數限制正如評論指出,以處理更大的價值,下一個身份不一定是Max(id)+1。

這可能是有人無意中將您的種子值無意中改變了上限。

發出以下命令來檢查種子值:

DBCC CHECKIDENT (tableName, NORESEED)

您應該看到這樣的事情:

檢查標識信息:當前標識值 '1109',當前 列值「 1109' 。

DBCC執行完成。如果DBCC打印錯誤 消息,請聯繫您的系統管理員。

如果返回的值不相同,它可能會付出重新種子的身份...如果返回的第一個值在極限,這就是爲什麼你會得到錯誤,而你肯定需要重新種植。

重新種子你會使用以下設置標識爲最大(id)+1。

DBCC CHECKIDENT (tableName, RESEED)

如果要指定下一個種子值,你可以使用:

DBCC CHECKIDENT (tableName, RESEED, 123456)

NB:123456是當前的種子,所以接下來的插入會得到123457.

請在重新播種之前閱讀此msdn article,並瞭解可能對您的業務和數據產生的影響。

1

可以檢查身份:

select IDENT_CURRENT('table_name') 

如果要刪除和插入數據時,標識值將繼續增加。截斷將重置表格的標識。

您可以更改的數據類型爲bigint如果是有道理的