Ошибка преобразования при преобразовании значения varchar "x" в тип данных int SQL - PullRequest
0 голосов
/ 27 июня 2019

У меня есть этот запрос:

SELECT * 
  FROM STUDENTS 
 WHERE STUDENT_ID NOT IN 
       (SELECT STD_VALUE 
          FROM PROVIDERS_STD 
         WHERE STD_TYPE = 'STUDENT')

У меня следующая ошибка:

Ошибка преобразования при преобразовании значения varchar "x" в тип данных int.

Ошибка не всегда отображается и на одних и тех же компьютерах.Я упоминаю, что этот запрос используется в проекте ASP.NET Webforms C #.

параметризация

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Предполагая, что вы обращаетесь к таблицам, а не к представлениям, это произойдет, только если 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'
                 );

Обратите внимание, что я преобразовываю в число, а не в строку.Всего пару недель назад я заметил ошибку в каком-то коде.,,из-за заполнения нулями строковых значений в аналогичной ситуации.

0 голосов
/ 27 июня 2019

Если какие-либо записи возвращаются из запроса ниже, вам необходимо исключить их.

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

Это потому, что значение из STD_VALUE не может быть неявно преобразовано в int.(а также явный)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...