Comment puis-je corriger les erreurs d'opération OLE DB en plusieurs étapes dans SSIS?

J'essaye de faire un package DTS pour transférer des données entre deux bases de données sur le même server et j'obtiens les erreurs suivantes. Iv a lu que l'erreur générée par l'opération OLE DB en plusieurs étapes peut se produire lorsque vous transférez entre différents types de database et qu'il y a une perte de précision, mais ce n'est pas le cas ici. Comment puis-je examiner les métadonnées de la colonne?

Erreur: 0xC0202009 à la tâche de stream de données, piTech [183]: une erreur OLE DB s'est produite. Code d'erreur: 0x80040E21. Un logging OLE DB est disponible. Source: "Microsoft SQL Native Client" Hresult: 0x80040E21 Description: "Opération OLE DB en plusieurs étapes a généré des erreurs Vérifiez chaque valeur d'état OLE DB, si disponible.

Erreur: 0xC0202025 à la tâche de stream de données, piTech [183]: impossible de créer un accesseur OLE DB. Vérifiez que les métadonnées de colonne sont valides.

Erreur: 0xC004701A lors de la tâche de stream de données, DTS.Pipeline: le composant "piTech" (183) a échoué à la phase de pré-exécution et a renvoyé le code d'erreur 0xC0202025.

Jetez un oeil aux propriétés des champs (type, longueur, valeur par défaut, etc.), ils devraient être les mêmes.

J'ai eu ce problème avec SQL Server 2008 R2 parce que la longueur des champs n'est pas égale.

Cette erreur est courante lorsque la table source contient une colonne TEXT et que la cible est autre qu'une colonne TEXT. Il peut être un vrai mangeur de time si vous n'avez pas rencontré (ou oublié!) Cela avant.

Convertissez la colonne de text en string et définissez la condition d'erreur sur la troncature à ignorer. Cela servira généralement de solution à cette erreur.

Cette requête devrait identifier les colonnes qui sont des problèmes potentiels …

 SELECT * FROM [source].INFORMATION_SCHEMA.COLUMNS src INNER JOIN [dest].INFORMATION_SCHEMA.COLUMNS dst ON dst.COLUMN_NAME = src.COLUMN_NAME WHERE dst.CHARACTER_MAXIMUM_LENGTH < src.CHARACTER_MAXIMUM_LENGTH 

Ce problème viendra principalement en raison des lignes vides à la fin du file, supprimez ceux-ci et exécutez le travail.

Vous pouvez utiliser SELECT * FROM INFORMATION_SCHEMA.COLUMNS mais je suppose que vous avez créé la database de destination à partir d'un script de la database source, il est donc très probable que les colonnes soient les mêmes.

Certaines comparaisons peuvent toutefois apporter quelque chose.

Ces sortes d'erreurs viennent parfois d'essayer d'insert trop de données dans les colonnes varchar aussi.

J'ai eu un problème similaire lorsque je transférais des données d'une ancienne database à une nouvelle database, j'ai eu l'erreur ci-dessus. J'ai ensuite couru le script suivant

SELECT * FROM [source].INFORMATION_SCHEMA.COLUMNS src INNER JOIN [dest].INFORMATION_SCHEMA.COLUMNS dst ON dst.COLUMN_NAME = src.COLUMN_NAME WHERE dst.CHARACTER_MAXIMUM_LENGTH < src.CHARACTER_MAXIMUM_LENGTH

et a trouvé que mes colonnes étaient légèrement différentes en termes de tailles de caractères, etc. J'ai ensuite essayé de modifier le tableau à la nouvelle structure de la table qui n'a pas fonctionné. J'ai ensuite transféré datatables de l'ancienne database dans Excel et importé datatables d'Excel vers la nouvelle database qui a fonctionné à 100%.

Vérifiez également si le script n'a pas de commands de séparation par lots (supprimez les instructions 'GO' sur une seule ligne).

'-2147217887' message 'IDispatch error #3105' source 'Microsoft OLE DB Service Components' description 'Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.'."

C'est ce à quoi je faisais aussi face. Le problème est venu du fait que j'ai changé mon fournisseur SQLOLEDB.1 en SQLNCLI11 sans mentionner le mode de compatibilité dans la string de connection. Lorsque j'ai défini cette DataTypeCompatibility=80; dans la string de connection, j'ai résolu le problème.

Cette erreur se produira également en essayant de faire un insert et un champ est codé non nul et des nulls essayent d'être insérés.

J'ai cette erreur lors du transfert d'un csv à mssql, j'ai converti les colonnes en DT_NTEXT et certaines colonnes sur mssql où set à nvarchar (255).

les mettre à nvarchar (max) l'a résolu.