Une erreur 0xC0202009 se produit lorsque SSIS effectue un cast de paramètre dans SQL Server

Cet article vous aide à résoudre l’erreur 0xC0202009 qui se produit lorsque Microsoft SQL Server Integration Services (SSIS) effectue un cast de paramètres dans SQL Server.

Version du produit d’origine : SQL Server
Numéro de la base de connaissances d’origine : 3001293

Symptômes

Lorsque vous exécutez un package SSIS, l’exécution échoue en raison d’une erreur de conversion de paramètre et le message d’erreur suivant s’affiche :

Code : 0xC0202009
Source : tâche Data Flow
Description : code d’erreur SSIS DTS_E_OLEDBERROR. Une erreur OLE DB s’est produite. Code d’erreur : 0x80040E21.
Un enregistrement OLE DB est disponible. Source : « Microsoft SQL Server Native Client 11.0 »
Hresult : 0x80040E21 Description : « Valeur de caractère non valide pour la spécification de cast ».

Pour un composant source OLE DB, lorsque vous avez une tâche de flux de données qui contient une requête paramétrable, vous pouvez rencontrer ce problème. Par exemple, vous avez la requête suivante :

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

Remarque

Ce problème se produit uniquement si vous essayez d’utiliser un composant source OLE DB avec des paramètres dans la chaîne de requête. Un marqueur ? de paramètre est mappé à une variable utilisateur SSIS parameter1 définie en tant que chaîne 20080122SSIS .

Cause

Le problème se produit en raison du changement de comportement dans la façon dont OLE DB gère les paramètres. Dans Microsoft SQL Server 2012, la nouvelle procédure stockée de sp_describe_undeclared_parameters , remplacement de set fmtonly retourne un résultat différent pour le type de paramètre. Cette modification est par nature.

Dans l’exemple de requête de la section Symptômes , le comportement d’origine consiste à décrire ? comme étant char(8). Toutefois, la nouvelle sp_describe_undeclared_parameters indique que ? doit être datetime. Par conséquent, le cast interne de la chaîne vers datetime qui est géré par le fournisseur OLE DB retourne le message d’erreur.

Résolution

Pour résoudre ce problème, réécrire la requête pour ajouter un cast explicite supplémentaire au type de données d’origine. sp_describe_undeclared_parameters Retourne ensuite le type attendu correct. Pour résoudre ce problème dans l’exemple de requête décrit dans la section Symptômes , mettez à jour la requête comme suit :

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