Поделиться через


Ошибка 0xC0202009 возникает, когда служба SSIS выполняет приведение параметров в SQL Server

Эта статья поможет устранить ошибку 0xC0202009, возникающую при выполнении microsoft SQL Server Integration Services (SSIS) приведения параметров в SQL Server.

Исходная версия продукта: SQL Server
Исходный номер базы знаний: 3001293

Симптомы

При запуске пакета служб SSIS выполнение завершается ошибкой из-за ошибки приведения параметров, и вы получите следующее сообщение об ошибке:

Код: 0xC0202009
Источник: задача Поток данных
Описание: код ошибки служб SSIS DTS_E_OLEDBERROR. Возникла ошибка OLE DB. Код ошибки: 0x80040E21.
Доступна запись OLE DB. Источник: "Microsoft SQL Server Native Client 11.0"
Hresult: 0x80040E21 Описание: "Недопустимое значение символа для спецификации приведения".

Для компонента источника OLE DB при наличии задачи потока данных, содержащей параметризованный запрос, может возникнуть эта проблема. Например, у вас есть следующий запрос:

SELECT mydate
FROM dbo.myTable
WHERE mydate >= convert (char, dateadd(year,-1,cast( ? as datetime)))

Примечание.

Эта проблема возникает только при попытке использовать компонент источника OLE DB вместе с параметрами в строке запроса. Маркер ? параметра сопоставляется с параметром пользовательской переменной служб SSIS1, который определяется как строка 20080122SSIS.

Причина

Проблема возникает из-за изменения поведения в том, как OLE DB обрабатывает параметры. В Microsoft SQL Server 2012 новая хранимая процедура sp_describe_undeclared_parameters , замена набора fmtonly возвращает другой результат для типа параметра. Это изменение по дизайну.

В примере запроса в разделе "Симптомы" исходное поведение заключается в описании?.char(8) Однако новый sp_describe_undeclared_parameters говорит, что ? должно быть datetime. Поэтому внутренний приведение из строки в datetime строку, которая обрабатывается поставщиком OLE DB, возвращает сообщение об ошибке.

Решение

Чтобы устранить эту проблему, переопределите запрос, чтобы добавить дополнительный явный приведение к исходному типу данных. sp_describe_undeclared_parameters Затем возвращает правильный ожидаемый тип. Чтобы устранить эту проблему в примере запроса, описанного в разделе "Симптомы ", обновите запрос следующим образом:

SELECT mydate
FROM dbo.myTable
WHERE mydate >= convert(char ,dateadd(year,-1, cast( cast( ? as char(8)) as datetime)))