我有这个查询:
discriminator
我遇到以下错误:
将varchar“ x”值转换为数据类型时,转换失败
错误并不总是显示在同一台计算机上。我提到此查询是在ASP.NET Webforms C#项目中使用的。
参数化
答案 0 :(得分:0)
假设您要访问表而不是视图,则只有在STUDENTS.STUDENT_ID
和PROVIDES_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
。 (以及明确的)