将varchar“ x”值转换为数据类型int SQL时转换失败

时间:2019-06-27 13:50:05

标签: c# sql

我有这个查询:

discriminator

我遇到以下错误:

  

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

错误并不总是显示在同一台计算机上。我提到此查询是在ASP.NET Webforms C#项目中使用的。

参数化

2 个答案:

答案 0 :(得分:0)

假设您要访问表而不是视图,则只有在STUDENTS.STUDENT_IDPROVIDES_STD.STD_VALUE具有不同的类型(一个为数字,一个为字符串)时,才会发生这种情况。

我不喜欢使用子查询的NOT IN,因为在存在NULL的情况下它不能直观地工作。因此,我将对查询进行明确的转换:

SELECT S.* 
FROM STUDENTS S
WHERE NOT EXISTS (SELECT 1
                  FROM PROVIDERS_STD P
                  WHERE TRY_CONVERT(INT, P.STD_VALUE) = S.STUDENT_ID AND
                        P.STD_TYPE = 'STUDENT'
                 );

请注意,我正在转换为数字,而不是字符串。就在几周前,我注意到某些代码中有一个错误。 。 。由于在类似情况下字符串值的填充为零。

答案 1 :(得分:-1)

如果以下查询返回了任何记录,则需要排除它们。

SELECT STD_VALUE FROM PROVIDERS_STD where STD_TYPE ='STUDENT' 
AND ISNUMERIC(STD_VALUE) = 0

这是因为无法将STD_VALUE中的值隐式转换为int。 (以及明确的)