Ошибка преобразования из-за несоответствия типов данных - PullRequest
0 голосов
/ 29 октября 2019

Когда я выполняю это

UPDATE #Export 
SET LANID = SubString(DBF.LANID,1,10),New_LANID = DBF.LANID          
FROM #Export SE      
Left JOIN tbl_PERSON_BLUE_ALL_VW_SOAtoOracle DBF 
ON 
Convert(Int,DBF.persn_Id)=SE.emp_id  

Я получаю эту ошибку

Msg 245, Level 16, State 1, Line 159
Conversion failed when converting the varchar value '000G76007' to data type int.

Модификация JOIN, кажется, исправляет это.

UPDATE #Export 
SET LANID = SubString(DBF.LANID,1,10),New_LANID = DBF.LANID          
FROM #Export SE      
Left JOIN tbl_PERSON_BLUE_ALL_VW_SOAtoOracle DBF 
ON 
TRY_CAST(DBF.persn_Id as int) IS NOT NULL AND
Convert(Int,DBF.persn_Id)=SE.emp_id   

Есть ли ещевероятность того, что это может потерпеть неудачу? Есть ли лучшее решение?

1 Ответ

1 голос
/ 29 октября 2019

Использование try_convert()!

UPDATE SE
    SET LANID = LEFT(DBF.LANID, 10),
        New_LANID = DBF.LANID          
    FROM #Export SE LEFT JOIN   
        tbl_PERSON_BLUE_ALL_VW_SOAtoOracle DBF 
        ON TRY_CONVERT(INT, DBF.persn_Id) = SE.emp_id ;

Примечания:

  • TRY_CONVERT() устранит ошибки преобразования. Преобразуя в int, вы также устраняете проблемы с ведущими нулями.
  • Два идентификатора должны быть одного типа! Вы даже не можете объявить правильное отношение внешнего ключа.
  • LEFT() в этом случае удобнее, чем SUBSTRING().
  • Используйте псевдоним таблицы, определенный в предложении FROM. На самом деле я считаю ошибкой в ​​SQL Server то, что вы можете напрямую ссылаться на таблицу, даже если она имеет псевдоним таблицы.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...