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

时间:2018-02-07 22:10:10

标签: sql sql-server

Select Distinct
          E.EmpNo,
          convert(date,R.APPLYDATE) AS DateWorked,
      R.PAYCODENAME
From 
TableExportEmployees E
INNER JOIN VP_RTIMEDTLTOTALS R
ON R.PERSONNUM = E.EmpNo
Inner Join VP_SCHEDULE V
ON V.PERSONNUM = E.EmpNo

当我执行此操作时,我收到此错误

  

Msg 248,Level 16,State 1,Line 1 varchar值的转换   ' 5035899999'溢出了一个int列。

2 个答案:

答案 0 :(得分:0)

原因在于错误代码。它试图将该值评估为int类型。

该值超出了int支持的范围。

请参阅:https://docs.microsoft.com/en-us/sql/t-sql/data-types/int-bigint-smallint-and-tinyint-transact-sql

查找违规列,如果您确实需要将该大值存储为数字,则需要将列重新定义为bigint类型。或者,如果可以存储为字符串,则将列重新定义为varchar类型(大于10),因为您的值已经是10位数。

根据您的评论,违规列实际上是PersonNum。 SQL正在尝试将其转换为int以与EmployeeNum进行比较。要修复它,您需要将EmployeeNum重新定义为与PersonNum相同的数据类型,或者将它们重新定义为bigint。

答案 1 :(得分:0)

进行连接时,需要确保连接中使用的列类型在两个表中具有相同的类型。 这可能会导致这些错误。

验证并告诉我们以下列类型:   - R.PERSONNUM   - E.EmpNo   - V.PERSONNUM

如果您使用的是int列,则应使用bigint或numeric

更改它