Я разрабатываю и тестирую пакет SSIS в SQL 2012 для импорта строк из текстового файла в промежуточную таблицу (которая усекается перед каждым исполнением) с использованием задачи сценария , Затем для выполнения хранимой процедуры используется задача Execute SQL, которая затем запрашивает промежуточную таблицу и форматирует данные для вставки в финальную таблицу.Сохраненная процедура завершается с ошибкой в выполнении задачи SQL, но успешно выполняется вручную
В настоящее время я тестирую только два разных файла. Эти файлы представляют собой отдельные электронные письма, полученные ежедневно, которые я настроил в Outlook для сохранения в виде текстовых файлов. Каждый файл переименовывается как YYYYDDMM_HHMMSS_ [filename] .txt. В моем пакете SSIS используется цикл For Each для назначения этого имени файла переменной @AckFileName, которую я передаю в свою хранимую процедуру и анализирую файл datetime из него.
Таким образом, первая линия моей хранимой процедуры:
SELECT DISTINCT CONVERT(datetime,left(@AckFileName,8)+' '+substring(@AckFileName,10,2)+':'+substring(@AckFileName,12,2)+':'+substring(@AckFileName,14,2))
Когда я запустить хранимую процедуру в SSMS она работает правильно:
Exec [dbo].[ParseAckFile] @AckFileName
Однако, несмотря на то, у меня есть один и тот же идентичный код для моего SQL-запроса в моей задаче Execute SQL я получаю следующую ошибку:
"Exec [dbo].[ParseAckFile]..." failed with the following error: "Conversion failed when converting date and/or time from a character string."
Хорошо, так что это кажется простым/очевидным ... кроме запроса в моей хранимой процедуре является преобразование строки в datetime, поэтому она также должна возвращать ошибку при запуске вручную, правильно? Я тестировал это с каждым файлом, и результаты были одинаковыми - proc работает отлично вручную с любым файлом, но задача Execute SQL завершается с ошибкой.
Дополнительно: Я попытался установить проверку задержек = True в рамках задачи Execute SQL с использованием подключения OLEDB или ADO.NET к моей финальной таблице и использования выражения в задаче Execute SQL для построения моего запроса. Ни одна из этих попыток не имела никакого значения для сообщения об ошибке, которое я получаю.
Любые другие предложения, которые я могу попробовать?
Вы пробовали просматривать трассировку профилировщика, чтобы убедиться, что ваш пакет SSIS отправляет значение параметра, которое, по вашему мнению, является? –
Да @TabAlleman, имя файла в параметре - это тот, который я ожидаю. Я только что что-то обнаружил, но для тестирования я жестко закодировал имя файла в сохраненном proc, а затем удалил параметр из моей команды Execute SQL. Он работал правильно. Теперь мне интересно, хотя хотя мой параметр - Varchar, если мне может понадобиться инкапсулировать его в одиночные кавычки внутри proc? Мне нужно сделать больше тестов ... –