У меня есть SQL Серверная копия, которая извлекает данные из базы данных Oracle. Проблема, которая у меня возникла, кажется немного нерешенной.
В запросе, основанном на левом соединении, есть один столбец, который, как только я его добавил, либо
A) Извлечение просто завершается неудачно, без какого-либо сообщения об ошибке в задании history
B) Неправильное количество записей импортировано (т. е. выполняется запрос напрямую, хотя oracle показывает счетчик возвратов 2000 строк, и я получаю 1895 при импорте).
Удаление соединения и столбца решает проблему, но, к сожалению, это информация, которую я должен иметь. Я исследовал это в Интернете и о единственной информации, которую я нашел (что-то о добавлении в строку подключения), не решил проблему. Я также попытался учесть любые проблемы, которые могут возникнуть из-за наличия нулевых значений в столбце, добавив оператор CASE в запрос извлечения, как это (это значение GUID, которое вызывает проблему, обратите внимание на псевдокод):
,CASE
WHEN oracle.guid IS NULL
THEN '00000000-0000-0000-0000-000000000000'
ELSE REPLACE(REPLACE(oracle.guid, '{', ''), '}', '')
END AS sql.guid
Как вы можете видеть здесь, я выполняю замену в запросе, поскольку исходное значение заключено в квадратные скобки, а целевые значения должны быть удалены.
Это исходит из Oracle 12 C до SQL Server 2016. Соединение устанавливается с помощью файла OraOLEDB12.dll, предоставляемого из установочного пакета ODA C.