SSIS сопоставляет переменную даты и времени с varchar в потоке данных - PullRequest
0 голосов
/ 28 января 2019

У меня есть таблица с датой хранения столбцов в формате varchar (10), например '20190101'.У меня переменная в SSIS определяется как формат DateTime.теперь я хочу, чтобы значение совпадало с источником потока данных SSIS OLE DB , в формате SELECT * FROM table where date = CONVERT(varchar(10), ?, 112).

Похоже, преобразование работало некорректно;в потоке данных не появляется никаких квалифицированных данных.

Так что же не так с этим запросом (результат выглядит хорошо при помещении его в SSMS) и как его отладить (невозможно отладить его с помощью запроса, подобногоSELECT CAST(? AS varchar(10) FROM table в источнике данных).

(PS: последнее, что я хочу сделать, это определить другую строковую переменную для работы).

1 Ответ

0 голосов
/ 28 января 2019

Причина заключается в неявном преобразовании источником данных служб SSIS при выборе типа параметра в соответствии с противоположной стороной оператора.Попробуйте этот тест:

  1. Установите правильное соединение источника данных служб SSIS с таблицей, содержащей столбец даты (времени);сделать переменную dateTime.
  2. Переключить источник данных на команду SQL и ввести один за другим следующие запросы:

SELECT 1 FROM table WHERE ? > 1

SELECT 1 FROM table WHERE ? > '1'

SELECT 1 FROM table WHERE ? > date_col

Выполнить поток данных. В SSMS процитировать последние сеансы:

select top 50 t.text, s.* from sys.dm_exec_query_stats s CROSS APPLY sys.dm_exec_sql_text(sql_handle) t where t.text LIKE <filter your session> order by last_execution_time desc

Вы можете найти способ интерпретации параметра:

(@P1 int)SELECT 1 FROM table WHERE ? > 1

(@P1 varchar(8))SELECT 1 FROM table WHERE ? > '1'

(@P1 datetime)SELECT 1 FROM table WHERE ? > date_col

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

Поэтому в моей проблеме параметр dateTime был сначала неявно преобразован в varchar с неизвестным форматом, чем мы пытаемся преобразовать его в указанный тип date:

SELECT * FROM table where date = CONVERT(varchar(10), 'Jan 01 2019 12:00:00', 112)

...