Partager via


L’erreur 0xC0202009 se produit lorsque SSIS effectue un cast de paramètres 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 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 cast de paramètres et vous recevez le message d’erreur suivant :

Code : 0xC0202009
Source : Tâche de flux de données
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)))

Note

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é à un paramètre de variable utilisateur SSIS qui est défini 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 , le remplacement du jeu fmtonly retourne un résultat différent pour le type de paramètre. Cette modification est par conception.

Dans l’exemple de requête de la section Symptômes , le comportement d’origine doit ? être char(8). Toutefois, le nouveau sp_describe_undeclared_parameters dit qu’il ? devrait être datetime. Par conséquent, le cast interne de chaîne datetime vers celui-ci 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 correct et attendu. 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)))