轉換 varchar 值 '4000000001' 時溢出了整數列問題解決



一開始的時候用如下代碼:

alter proc getSerialNO
@TYPE VARCHAR(2),
@serialNO VARCHAR(10) OUTPUT
AS


if (upper(@type) ='TR')
begin
 select @serialNO = SERIALNO from tb_trserialno
 set @serialNO = @serialNO + 1
 update tb_trserialno set SERIALNO = @serialNO ,LASTUPDATE = CONVERT(VARCHAR,GETDATE(),120)
end


結果報錯:

 轉換 varchar 值 '4000000001' 時溢出了整數列。

分析:
set @serialNO = @serialNO + 1 這條語句被執行時,數據庫應該試圖將 @serialNO 轉換為默認的int來進行 +1操作,轉換發生了異常!

網上查資料得知:

bigintbigint-2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型數據(所有數字)。存儲大小為 8 個字節。 遂作如下修改

 

 

alter proc getSerialNO
@TYPE VARCHAR(2),
@serialNO VARCHAR(10) OUTPUT
AS


if (upper(@type) ='TR')
begin
	select @serialNO = SERIALNO from tb_trserialno
	set @serialNO = cast(cast(@serialNO as bigint) + 1 as varchar)
	update tb_trserialno set SERIALNO = @serialNO ,LASTUPDATE = CONVERT(VARCHAR,GETDATE(),120)
end

 

測試正常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM