SSIS 2008 Выполняет сопоставление выходных параметров SQL datetime2 проблема

StackOverflow https://stackoverflow.com/questions/876886

Вопрос

Я пытаюсь использовать задачу Execute SQL в SSIS 2008 для сопоставления выходного параметра процедуры хранения с переменной пакета.

Переменная пакета имеет тип DateTime SSIS, а параметр процедуры хранения - тип DATETIME SQL.

Оператор SQL является EXEC GetCurrentDate @CurrentDate=? и на экране сопоставления параметров параметр сопоставляется переменной пакета с указанным выводом направления и типом данных DBTIMESTAMP.

Когда я запускаю пакет, я получаю следующую ошибку:

Ошибка [Выполнить задачу SQL]:Выполнение запрос "EXEC GetCurrentDate" @currentDate=?" сбой из-за следующей ошибки:"Тип значения, присваиваемого переменной "User::currentDate" отличается от типа текущей переменной.Переменные могут не изменять тип во время выполнения.Типы переменных являются строгими, за исключением переменных типа Object.".Возможные причины сбоя:Проблемы с запросом, свойство "ResultSet" не задано правильно, параметры не заданы правильно или соединение не установлено установлено правильно.

Если я запускаю трассировку по выполняемому запросу, я вижу, что тип предполагается как datetime2:

declare @p3 datetime2(7)
set @p3=NULL
exec sp_executesql N'EXEC GetCurrentDate @CurrentDate=@P1 ',N'@P1 datetime2(7) OUTPUT',@p3 output
select @p3

Кто-нибудь знает, почему предполагается, что тип равен datetime2?

Спасибо

Это было полезно?

Решение

Нашел ответ в отчете об ошибке Micorsoft Connect:

Мы закрываем это дело, поскольку это ожидаемое поведение и является результатом нового изменения типа sql datetime.Вы используете собственный oledb connection manager для sql task, в процессе COM-взаимодействия мы используем VARIANT для хранения значения, и единственный способ предотвратить потерю данных - сохранить значение как BSTR variant.Если вы измените User::dateParam на строковый тип, это сработает, или вы можете переключиться на использование диспетчера управляемых подключений, чтобы обойти COM-взаимодействие.

http://connect.microsoft.com/SQLServer/feedback/ViewFeedback.aspx ?Идентификатор обратной связи=307835

Другие советы

Попробуйте указать входные / выходные параметры следующим образом DATE вместо того , чтобы DBTIMESTAMP в задаче SSIS.

Это, безусловно, работает в пакетах SSIS 2005, над которыми я работал.

На это также стоит обратить внимание эта ссылка, который охватывает это, а также пару других проблем, связанных с SSIS и датами.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top