2016-08-01 53 views
1

當通過vb代碼運行時,發生將IDENTITY轉換爲數據類型int的算術溢出錯誤。但是當我執行存儲過程時,數據被正確插入。將IDENTITY轉換爲數據類型的算術溢出錯誤int

通過應用程序有時也有效,有時它不會。

當我檢查當前標識值和當前列值是不同的。這是否屬於問題。

請讓我知道如何解決它。

+1

請粘貼確切的錯誤消息和一些示例表架構 – TheGameiswar

+0

那麼是IDENTITY和int?檢查表格定義。顯示你的VB代碼。 – Paparazzi

回答

1

2147483647INT的最大尺寸,因此您的IDENTITY大於此值。如果您的IDENTITY不會超過9223372036854775807,您可以使用BIGINT來解決您的錯誤。

+0

它沒有穿過最大INT值。數據來自MQ ..我經過一段時間的數據處理後停止了MQ連接。在它達到0.我再次連接它顯示相同的錯誤。我注意到當前列值和當前身份值是不同的,有些時候這兩個變得相同。我假設當兩者都相同時流程正在發生。 –

0

你正在使用哪個版本的VB?你使用變量類型'long'來返回返回值嗎?在VB 6和int之前,值是非常有限的,在.net中它仍然被限制爲只包含大約10位數字。

我會確保你使用的是「長」在VB

0

您可以使用此:

DBCC CHECKIDENT('dbo.TableName',reseed,0) 

它補種0

+1

你能否更新你的答案並解釋你在做什麼?提前謝謝了 – MZaragoza

0

像其他人說,你的列是更大比類型的range allowed大。

您可以像其他人所說的那樣使用DBCC CHECKIDENT('dbo.TableName',reseed,0)來種子,但如果您嘗試to reuse a value that has already been used,則可能導致錯誤。

假設該列是一個自動增量標識列,並且行計數低於數據類型範圍,則可以重新插入所有值。

  1. 創建一個備份表
  2. 插入到備份表中的所有條目
  3. 截斷原始表
  4. 插入從備份表中的所有條目
  5. 刪除備份表

這將取決於在你的限制之下,可能比它值得的更困難。

相關問題