Причина заключается в неявном преобразовании источником данных служб SSIS при выборе типа параметра в соответствии с противоположной стороной оператора.Попробуйте этот тест:
- Установите правильное соединение источника данных служб SSIS с таблицей, содержащей столбец даты (времени);сделать переменную
dateTime
. - Переключить источник данных на команду 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)