Sql 在Visualstudio中将varchar值转换为数据类型int错误时,转换失败

Sql 在Visualstudio中将varchar值转换为数据类型int错误时,转换失败,sql,reporting-services,ssrs-2008,type-conversion,varchar,Sql,Reporting Services,Ssrs 2008,Type Conversion,Varchar,查询: 上述查询在SSMS中运行良好,但当我从visual studio执行时,会抛出一个错误: 将varchar值“414084H”转换为数据类型int时,转换失败 我猜LearnerID列—数据类型varchar12有问题 我尝试将学习者ID转换为INT和convertin,学习者ID但没有帮助 非常感谢您的帮助 谢谢 Ar您的LearnerID值414084H的末尾包含一个字母。因此无法将其转换为整数 如果格式始终相同,则可以从选择中的值中仅选择前6个字符,这样转换将成功: SELECT

查询:

上述查询在SSMS中运行良好,但当我从visual studio执行时,会抛出一个错误:

将varchar值“414084H”转换为数据类型int时,转换失败

我猜LearnerID列—数据类型varchar12有问题

我尝试将学习者ID转换为INT和convertin,学习者ID但没有帮助

非常感谢您的帮助

谢谢


Ar

您的LearnerID值414084H的末尾包含一个字母。因此无法将其转换为整数

如果格式始终相同,则可以从选择中的值中仅选择前6个字符,这样转换将成功:

SELECT CAST(College_Year AS VARCHAR(10)),
       Learner_Id,
       Forename_1,
       Surname,
       sum(Possible_Duration) AS Possible_Duration,
       sum(Present_Duration) AS Present_Duration,
       CASE
           WHEN sum(Present_Duration) = 0 THEN 0
           ELSE sum(Present_Duration) / sum(Possible_Duration)
       END AS Attendance
FROM dbo.IM_AT_Attendance_vw
WHERE Session_date >=
    (SELECT ACYR_Start_Date
     FROM dbo.ACYR
     WHERE dbo.IM_fnCurrentACYR() = ACYR_College_year)
  AND Session_Date <=
    (SELECT ACYR_End_Date
     FROM dbo.ACYR
     WHERE dbo.IM_fnCurrentACYR() = ACYR_College_year)
  AND Session_Date NOT IN
    (SELECT Holiday_Date
     FROM IM_EFC_Holidays)
  AND Possible = 1
  AND month(Session_Date) = month(DATEADD(mm, -1, GETDATE()))
  AND Learner_ID = @Learner_ID
GROUP BY College_Year,
         Learner_Id,
         Forename_1,
         Surname
ORDER BY Surname,
         Attendance

请为您的应用程序添加更多上下文question@blackbishop-请参见上文。您可以尝试在存储过程中直接将字符串转换为int。所以:选择CASTSUBSTRINGLearnerID,0,7作为整数。我刚刚注意到,为了考虑所有数字,您必须作为参数7而不是6发送。错误:将varchar值“4B0446”转换为数据类型int时,转换失败。当然,它不起作用,值4B0446的格式与另一个值414084H的格式不同,因此无法使用公式进行概括。您应该考虑为什么需要将该值转换为整数,因为它显然不是整数。它是一根绳子。因此,您应该修改c代码中的变量类型。不可能出现相同的错误,因为两个值现在都是字符串,因此没有错误:将varchar值转换为数据类型int时转换失败。可能会出现错误。您能否添加您现在收到的确切错误以及调用存储过程的c代码示例?我相信您可以找到有权访问您的应用程序的人。它可以是任何程序员,而不一定是编写特定报告的人。从sql中没有什么可以做的,它确实是一个需要在c代码中完成的更改,因为这个字段显然是一个字符串,而不是一个int。
select SUBSTRING(LearnerID, 0, 6)