转换 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