Se produce el error 0xC0202009 cuando SSIS hace un parámetro convierte en SQL Server

Síntomas

Cuando ejecuta un paquete de Microsoft SQL Server Integration Services (SSIS), se produce un error en la ejecución debido a un error de conversión de tipos de parámetro y recibirá el siguiente mensaje de error:

Código: 0xC0202009
Origen: Tarea de flujo de datos
Descripción: Código de Error SSIS DTS_E_OLEDBERROR. Se ha producido un error de OLE DB. Código de error: 0x80040E21.
Un registro de OLE DB está disponible.  Fuente: "Microsoft SQL Server Native Client 11.0"
HRESULT: 0x80040E21 Descripción: "valor de carácter no válido para especificación cast".


Para que un componente de origen de OLE DB, cuando tiene una tarea de flujo de datos que contiene una consulta parametrizada, puede experimentar este problema. Por ejemplo, tiene la siguiente consulta:SELECT mydate FROM dbo.myTable
WHERE mydate >= convert (char, dateadd(year,-1,cast( ? as datetime)))
Nota: Este problema sólo se produce si intenta utilizar un componente de origen de OLE DB junto con los parámetros en la cadena de consulta. Un marcador de parámetro "?" se asigna a una de variable de usuario parámetro1 SSIS que se define como cadena de SSIS "20080122." Este problema se produce para los paquetes de migración de Microsoft SQL Server 2005 o una versión posterior.

Causa

El problema se produce debido al cambio de comportamiento en la manera en que OLE DB trata los parámetros. En Microsoft SQL Server 2012, el nuevo procedimiento almacenado de sp_describe_undeclared_parameters, reemplazo de set fmtonly devuelve un resultado diferente para el tipo de parámetro. Este cambio es por diseño.

En la consulta de ejemplo en la sección "Síntomas", el comportamiento original es describir "?" para que sea "char (8)". Sin embargo, el nuevo sp_describe_undeclared_parameters dice que "?" debe ser "datetime". Por lo tanto, la conversión interna de cadena a fecha y hora que se controla mediante el proveedor OLE DB devuelve el mensaje de error.

Solución

Para resolver este problema, vuelva a escribir la consulta para agregar una adicional conversión explícita al tipo de datos original. A continuación, sp_describe_undeclared_parameters devuelve el tipo correcto, esperado. Para resolver este problema en la consulta de ejemplo que se describe en la sección "Síntomas", actualice la consulta como sigue:SELECT mydate FROM dbo.myTable
WHERE mydate >= convert(char ,dateadd(year,-1, cast( cast( ? as char(8)) as datetime)))

Estado

Microsoft ha confirmado que se trata de un problema de los productos de Microsoft que se enumeran en la sección "Aplicable a".

¿Necesita más ayuda?

Ampliar sus conocimientos
Explorar los cursos
Obtener nuevas características primero
Unirse a Microsoft Insider

¿Le ha sido útil esta información?

¡Gracias por sus comentarios!

Gracias por sus comentarios. Quizá le interese ponerse en contacto con uno de nuestros agentes de soporte de Office.

×