Sql server 2008 获得';转换失败。。将varchar值设置为int';如果我删除ORDERBY子句
几天以来,我遇到了一个奇怪的问题,这使我无法运行任何查询Sql server 2008 获得';转换失败。。将varchar值设置为int';如果我删除ORDERBY子句,sql-server-2008,debugging,Sql Server 2008,Debugging,几天以来,我遇到了一个奇怪的问题,这使我无法运行任何查询 SELECT Empid as EmployeeId, EmpName, CustomerName as 'Distributor Name', Customer.RSCode, markedFor as 'Date Marked For', CASE WHEN Present = 0 THEN 'ABSENT' ELSE 'PRESENT' END AS Attendance, Reason FROM EmployeeAttendanc
SELECT Empid as EmployeeId, EmpName,
CustomerName as 'Distributor Name', Customer.RSCode, markedFor as 'Date Marked For',
CASE WHEN Present = 0 THEN 'ABSENT' ELSE 'PRESENT' END AS Attendance, Reason
FROM EmployeeAttendance_Backup ea, Customer, Employee e, EmployeeMaster em
WHERE
ea.DistID = cast(Customer.RSCode as int)
AND e.EmployeeMasterID=em.Id
AND ea.Empid = em.EmployeeID
--ORDER BY markedFor
如果我运行上述查询,我会得到~160k-190k条记录,然后它会以错误终止:
转换varchar值“Present”时转换失败
500004862'至数据类型int
我甚至没有选择字段,因为它会抛出此错误
如果启用了ORDER BY子句,则不会获得任何记录,并且出现以下错误:
将varchar值“Hirannaiah K R”转换为数据类型int时,转换失败
EmployeeAttention_备份表有近20万条记录。这会引起什么问题吗?我不知道如何寻找解决办法。我试着查看这个特定员工的考勤表,检查是否有一些记录保存不正确,但事实并非如此。对该特定员工的Employee和EmployeeMaster执行相同的操作
我从哪里开始查找问题?尝试
当ISNUMERIC(Customer.RSCode)=1时ea.DistID=CASE,然后强制转换(Customer.RSCode为INT)END
。虽然您最好修复您的设计,这样就不会在该列中存储混合数据类型。可能重复@MartinSmith,谢谢您的回答。你的建议没有改变任何事情。此外,模式是这样的,在需要的地方有varchar,在其他地方有int。因此,您提供的链接也没有帮助:(哪个列包含值'Present 500004862'
和'Hirannaiah K R'
?您需要在引用该列的地方执行类似操作。很可能您得到了对int
的隐式转换,并且您的模式看起来很混乱。如果您不这样混合数据类型,您将不会遇到这种情况。)问题。您发布的代码中没有fieldid
,也没有任何东西会导致EmpName
的隐式强制转换。您需要查看相等条件中使用的列中的值-除非您引用的任何表可能是事实视图?在这种情况下,您可能需要对它们运行sp_refreshview
。基础表的架构更改有时会导致这种奇怪的错误。