Сбой запроса объединяющих таблиц с кодом ошибки. Преобразование не удалось при преобразовании значения varchar 'XYZ' в тип данных tinyint - PullRequest
0 голосов
/ 02 марта 2020

Я столкнулся с проблемой при попытке объединить две таблицы. Я проверил, что типы данных одинаковы в обеих таблицах, но при этом отображается ошибка, связанная с преобразованием типов данных. Ниже приведены подробные сведения об ошибке:

Сообщение 245, Уровень 16, Состояние 1, Строка 1 Не удалось выполнить преобразование при преобразовании значения varchar 'A00.0' в тип данных tinyint.

Используемый мной запрос на присоединение выглядит следующим образом:

SELECT table1.column1,table1.column2,table2.column1
FROM table1 
LEFT JOIN table2
ON table1.matching_column = table2.matching_column;

Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 02 марта 2020

Очевидно, вы подходите к двум столбцам, которые не имеют одинаковый тип. Вы должны исправить типы!

В этом случае я рекомендую преобразовывать числа, а не строки. Это потому, что я был укушен ведущими нулями в прошлом - строки не совпадают, но цифры.

В SQL Сервер, используйте try_cast():

SELECT table1.column1, table1.column2, table2.column1
FROM table1 LEFT JOIN
     table2
     ON table1.matching_column = try_cast(table2.matching_column as tinyint);

Конечно, это предполагает, что table2 имеет строковый столбец.

0 голосов
/ 02 марта 2020

У вас есть два столбца с разными типами данных. Один является строкой, а другой - int, объединяющий (неявно) преобразующий строку в INT, но это не дает

, если вы не можете изменить данные структура для добавления того же типа данных в соответствующие столбцы .. попробуйте преобразовать int в строку

  SELECT table1.column1,table1.column2,table2.column1
  FROM table1 
  LEFT JOIN table2
  ON table1.matching_column = cast(table2.matching_column,as varchar(32) ) ;

или

  SELECT table1.column1,table1.column2,table2.column1
  FROM table1 
  LEFT JOIN table2
  ON cast(table1.matching_column,as varchar(32) ) = table2.matching_column ;
...