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

IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.

Haga clic aquí para ver el artículo original (en inglés): 3001293
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.myTableWHERE 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 usuarioparámetro1SSIS 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", es describir el comportamiento original "?" como "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 horaque 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_parametersdevuelve el tipo correcto, esperado. Para resolver este problema en la consulta de ejemplo que se describe en la sección "Síntomas", actualizar el asfollows de la consulta:
SELECT   mydate FROM     dbo.myTableWHERE 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".

Advertencia: este artículo se tradujo automáticamente

Propiedades

Id. de artículo: 3001293 - Última revisión: 10/02/2016 05:25:00 - Revisión: 2.0

Microsoft SQL Server 2014 Enterprise, Microsoft SQL Server 2012 Enterprise, Microsoft SQL Server 2008 R2 Enterprise, Microsoft SQL Server 2008 Enterprise, Microsoft SQL Server 2005 Enterprise Edition

  • kbtshoot kbexpertiseadvanced kbsurveynew kbmt KB3001293 KbMtes
Comentarios