SSIS Excel Import Forcing Incorrect Column Type

j'essaie d'importer un tableur dans notre base de données en utilisant SSIS. Pour une raison quelconque SSIS veut croire que deux des colonnes sont de type Double, quand ils contiennent des données de caractère. J'ai essayé de remapper les colonnes pour être nvarchar(255) mais il ne veut toujours pas sélectionner les données qu'il pense être double, parce qu'il y a des caractères dedans. Si j'essaie d'éditer le paquet SSIS et de changer les types de colonnes dans Excel Source, il ne me laissera pas changer le type des colonnes dans la sortie D'erreur et me donne une erreur si les colonnes de sortie régulière et de sortie d'erreur ne correspondent pas.

pourquoi le SSIS insiste-t-il pour que ces colonnes soient doubles? Comment puis-je le forcer à réaliser que ce sont des ficelles? Pourquoi tout de microsoft doit-il ne pas fonctionner correctement?

EDIT: j'ai trouvé ceci: http://support.microsoft.com/kb/236605

j'ai trié mes données pour que les types de données mixtes soient au sommet, et devinez ce que: Le problème inversé . Au lieu de ne pas importer de données de caractères, il a cessé d'importer des données purement numériques. Apparemment quelqu'un ne pense pas que 12345 peut être représenté comme une chaîne...

45
demandé sur CodeRedick 2009-02-12 20:44:30

16 réponses

j'ai déjà vu ce numéro, C'est Excel qui est le Numéro pas SSIS. Excel échantillonne les premières lignes et infère ensuite le type de données même si vous l'avez défini explicitement au texte. Ce que vous devez faire est de le mettre dans la chaîne de connexion du fichier Excel dans le paquet SSIS. Cette instruction indique à Excel que les colonnes contiennent des types de données mixtes et lui suggère de faire une vérification supplémentaire avant de décider que la colonne est un type numérique alors qu'en fait ce n'est pas le cas.

;Extended Properties="IMEX=1"

It devrait fonctionner avec cela (dans la plupart des cas). La chose la plus sûre à faire est d'exporter les données Excel vers le texte délimité tab et d'utiliser SSIS pour importer cela.

40
répondu James 2014-01-07 18:13:02

Vous pouvez convertir (ie. force) les données de la colonne au texte... Essayez ceci (Note: ces instructions sont basées sur Excel 2007)...

les étapes suivantes devraient forcer Excel à traiter la colonne comme du texte:

ouvrez votre tableur avec Excel.

sélectionnez la colonne entière qui contient vos "données essentiellement numériques" en cliquant sur l'en-tête de la colonne.

cliquez sur L'onglet Données du menu ruban.

sélectionnez Texte dans les colonnes. Cela fera apparaître l'Assistant conversion.

- Sur L'Étape 1: Cliquez Sur Suivant

- Sur L'Étape 2: Cliquez Sur Suivant

- sur L'Étape 3: Sélectionnez le texte et cliquez Terminer

Sauvegardez votre feuille Excel.

réessayez l'importation en utilisant L'Assistant D'importation de données SQL Server 2005.

aussi, voici un lien vers une autre question qui a des réponses supplémentaires:

Assistant Importation De Données N'Aime Pas Le Type De Données-Je Choisir Pour Une Colonne

29
répondu Joe L. 2017-05-23 12:26:32

une chose qui n'est pas mentionnée dans la réponse acceptée est que le paramètre" IMEX=1 "doit aller à l'intérieur de la partie citée de:

...;Extended Properties="...";
13
répondu RolandTumble 2009-08-04 16:41:17

; IMEX=1; ne fonctionne pas toujours... Tout sur les types de données mixtes dans Excel: mélange de types de données dans Excel colonne

enter image description here

7
répondu Joost 2012-07-19 12:44:28

une autre solution consiste à trier le tableur avec les données des caractères en haut, ce qui fait que Excel voit la colonne comme une chaîne de caractères, et importe tout comme tel.

5
répondu marks.chimp 2011-06-16 18:01:17

vous pouvez également modifier le Registre pour regarder plus de valeurs que seulement les 8 premières lignes. J'ai utilisé cette méthode et fonctionne très bien.

http://support.microsoft.com/kb/281517

3
répondu Jeremy C 2011-07-06 23:49:41

bien IMEX=1 n'a pas fonctionné pour moi. La suggestion de Reynier Booysen non plus. (Je ne sais pas si cela fait une différence, mais J'utilise SQL Server 2008r2). Une bonne explication de quelques solutions de rechange et aussi quelques explications de pourquoi IMEX=1 est limité aux huit premières lignes de chaque feuille de calcul peuvent être trouvées à http://social.msdn.microsoft.com/Forums/en-US/sqlintegrationservices/thread/78b87712-8ffe-4c72-914b-f1c031ba6c75

Espérons que cette aide

1
répondu Alan Merriam 2012-04-05 21:40:55

j'ai utilisé la recette suivante:

  1. Importer des données à partir d'Excel vers Access
  2. importer des données à partir de L'accès au serveur SQL

et ça a marché pour moi...

1
répondu aldy sefan 2014-06-16 10:33:49

je me cognais la tête contre un mur avec ce numéro pendant un moment. Dans notre environnement, nous consommons des fichiers de prix de nos fournisseurs dans divers formats, dont certains ont plus d'un million de disques. Cette question se pose généralement lorsque:

  • les lignes scannées par le pilote de L'OLEDB semblent contenir des nombres, mais contiennent des valeurs mélangées plus tard dans l'ensemble d'enregistrement, ou
  • Les champs
  • ne contiennent que des nombres, mais la source a quelques formaté sous forme de texte (habituellement des fichiers Excel).

le problème est que même si vous définissez votre colonne d'entrée externe au type de données désiré, le fichier est scanné à chaque fois que vous exécutez le paquet et est modifié dynamiquement en ce que le pilote de L'OLEDB pense que le champ devrait être.

nos fichiers source contiennent typiquement des en-têtes de champ (texte) et des prix (champs numériques), ce qui me donne une solution facile:

Première étape:

  • changez votre énoncé SQL pour inclure les champs d'en-tête. Cela oblige SSIS pour voir tous les champs de texte, y compris les zones de prix.

pour champs mixtes:

  • votre problème initial est résolu parce que vos champs sont maintenant du texte, mais vous avez toujours une ligne d'en-tête dans votre sortie.
  • Empêcher la ligne d'en-tête d'en faire votre sortie en changeant la clause SQL WHERE pour exclure les valeurs d'en-tête par exemple " WHERE NOT ([F4]='Price')"

pour les champs numériques:

  • en utilisant l'éditeur avancé pour la source OLE DB, définir la sortie colonne pour le champ prix (ou tout autre champ numérique) à un numérique Type de données. Cela provoque tous les enregistrements qui contiennent du texte dans ces domaines à l'échec, y compris l'enregistrement d'en-tête, mais les forces d'un de conversion sur valeurs numériques sauvegardées sous forme de texte.

  • définissez la sortie D'erreur pour ignorer les échecs sur vos champs numériques.

  • alternativement, si vous avez encore besoin d'erreurs sur les champs numériques redirigés, supprimer la ligne d'en-tête en changeant la clause SQL WHERE pour exclure les valeurs d'en-tête alors,

  • définit la sortie D'erreur pour rediriger les échecs sur ce champ.

évidemment, cette méthode ne fonctionne que lorsque vous avez des champs d'en-tête, mais espérons que cela aidera certains d'entre vous.

1
répondu Ryno 2015-05-14 00:44:00

Option 1. Utilisez Visual Basic pour itérer à travers chaque colonne et formater chaque colonne en texte.

utilisez le menu Text-to-Columns, ne changez pas la délimitation, et changez "général" en" texte "

0
répondu Aaron Ireland 2010-02-18 18:32:10

j'ai eu le même problème. Le problème se trouvent dans le Excel Source tâche. Lorsque vous configurez cette tâche la première fois, la tâche se connectera au fichier Excel spécifié (via la connexion Excel) et décidera quel type chaque colonne est basée sur le tableur courant.

ainsi, si vous configurez la tâche Excel Source , assurez-vous juste que les colonnes qui doivent être du texte n'ont que du texte dans la colonne. Cela signifie que l' Excel Source la tâche supposera toujours que tout tableur subséquent aura le même format et lira 12345 comme texte parce que la colonne était du texte lorsque la tâche a été établie.

Espère que ça a du sens!

0
répondu Reynier Booysen 2012-04-03 13:26:04

j'ai eu le même problème, des valeurs de type de données multiples dans une seule colonne, des valeurs numériques de charge de paquet seulement. Reste tout cela mis à jour comme null.

Solution

pour corriger cela changer le type de données excel est l'une de la solution. Dans Excel copier les données de colonne et coller dans un fichier différent. supprimer la colonne et insérer une nouvelle colonne comme type de données et coller les données copiées dans la nouvelle colonne.

maintenant dans le paquet ssis supprimer et recréer la source Excel et la table de destination changer la colonne type de données comme varchar .

ça va marcher.

0
répondu saravana rathinakani 2014-12-10 13:01:08

si plusieurs colonnes de la feuille de calcul excel portent le même nom, ce genre d'erreur se produit. Le paquet fonctionnera après avoir rendu le nom de la colonne distinct. Parfois les colonnes cachées sont ignorées en vérifiant les noms des colonnes.

0
répondu Samarendra Panda 2015-11-16 12:01:00
  1. cliquez sur fichier dans le menu ruban, puis sur Options.
  2. cliquez sur Avancé, puis sous Lors du calcul de ce cahier, sélectionnez la précision de L'ensemble tel qu'affiché case à cocher, puis cliquez sur OK.

  3. cliquez sur OK.

  4. dans la feuille de travail, sélectionnez les cellules que vous voulez formater.

  5. Sur l'onglet Accueil, cliquez sur le bouton Lancer de la boîte de dialogue image à côté de Nombre.

  6. dans la case Catégorie, cliquez sur le numéro.

  7. dans la case des décimales, inscrivez le nombre de décimales qui vous voulez afficher.

0
répondu Marcio Lopes Cattini 2016-07-12 14:20:56

ça a marché pour moi. Sélectionnez la colonne problematic dans Excel-mettez en surbrillance la colonne entière. Changez le format en "texte". Enregistrez le fichier Excel.

dans votre paquet SSIS, allez dans le volet de flux de données pour votre importation. Double-cliquez sur le noeud source Excel. Il devrait vous avertir que les types ont changé et vous demander si vous voulez reconfigurer. Cliquez Sur Oui. L'exécution devrait maintenant fonctionner et apporter toutes les valeurs.

Note: J'utilise Excel 2013 et Visual Studio 2015, mais je suppose que ces instructions fonctionneraient aussi pour les versions précédentes.

0
répondu jaycer 2016-12-06 15:29:19

Il m'a fallu un peu pour réaliser la source de l'erreur dans mon colis. Finalement j'ai trouvé que les données étaient converties en null ( Example: from "06" to "NULL" ), et j'ai trouvé cela via L'aperçu dans la connexion de fichier source ( Excel Source> Edit> Connection Manager> Sheet='MySheet'> Preview... ). J'ai été excité quand J'ai lu le post de James pour éditer la chaîne de connexion pour avoir des propriétés étendues: ;Extended Properties="IMEX=1" . Mais cela ne fonctionne pas pour moi.

j'ai été capable de résoudre l'erreur en changeant le Format de cellule dans la feuille de travail Excel de " nombre" au "texto". Après avoir changé le format, le processus de téléchargement s'est déroulé avec succès! Ma chaîne de connexion ressemble à: Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\myServer\d$\Folder1\Folder2\myFile.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=NO";

voici quelques screenshots qui résolvent mon message d'erreur.

Erreur : Métadonnées du fichier Excel de connexion enter image description here

Source d'erreur : format "général" enter image description here

Source d'erreur changée : "format texte enter image description here

correction d'Erreur : Métadonnées du fichier Excel de connexion enter image description here

0
répondu SherlockSpreadsheets 2018-08-06 20:45:30