varchar值'6000545901'的转换溢出了一个int列

时间:2013-11-19 06:23:12

标签: sql-server-2008

Begin
   UPDATE pmptxft 
   SET
    vaccno = (SELECT  max(cast(isnull(vaccno,0) AS int)) + 1 FROM pmptxft WHERE iPRACID=@IPRACID)
   WHERE ipatId = @PatientIdentity
  END

这里的疫苗数据类型是varchar(max)。在这方面的任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

我假设数据类型错误是原因。比较不同数据类型的两个值时,自动数据类型转换可能会导致此类错误。

检查

的数据类型
  • ipracis列和@IPRACID变量
  • ipatId列和@PatientIdentity变量

答案 1 :(得分:0)

6000545901超出范围。 int数据类型有range of

-2^31 (-2,147,483,648) to 2^31-1 (2,147,483,647)

请尝试使用BIGINT

UPDATE pmptxft 
SET    vaccno = (SELECT Max(Cast(Isnull(vaccno, 0) AS BIGINT)) + 1 
                 FROM   pmptxft 
                 WHERE  ipracid = @IPRACID) 
WHERE  ipatid = @PatientIdentity 

Here是一个有效的例子。