Chaque fois que j'essaie d'importer un fichier Excel dans SQL Server, j'obtiens une erreur particulière. Lorsque j'essaie de modifier les mappages, la valeur par défaut pour tous les champs numériques est float. Aucun des champs de mon tableau ne contient de décimales et ne constitue pas un type de données monétaire. Ce ne sont que des nombres à 8 chiffres. Cependant, comme je ne veux pas que ma clé primaire soit stockée sous la forme d'un float lorsqu'il s'agit d'un int, comment puis-je résoudre ce problème? Cela me donne une erreur de troncature, je posterai un bouchon d'écran si nécessaire. Est-ce un problème courant?
Il est à noter que je ne peux pas importer de fichiers Excel 2007 (je pense avoir trouvé la solution à ce problème), mais même lorsque j'essaie d'importer des fichiers .xls, chaque valeur contenant des chiffres est automatiquement importée sous forme de virgule flottante. changez-le je reçois une erreur.
SSIS ne convertit pas implicitement les types de données, vous devez donc le faire explicitement. Le gestionnaire de connexions Excel ne peut gérer que quelques types de données et tente de deviner la meilleure hypothèse en fonction des premières lignes du fichier. Ceci est entièrement documenté dans la documentation SSIS.
Vous avez plusieurs options:
INSERT
dans la table de destination réelle à l'aide de CAST
ou CONVERT
pour convertir les donnéesVous voudrez peut-être aussi noter les commentaires dans la documentation Importer Wizard à propos des mappages de types de données.
Ce que Derloopkat a dit, ce qui peut toujours échouer lors de la conversion (pas d'infraction Derloopkat), car Excel est terrible en cela
Il s’ouvrira, vérifiez-le pour vous assurer de son exactitude, puis enregistrez-le sous un fichier Excel.
Lorsque Excel trouve des types de données mélangés dans la même colonne, il détermine le format approprié pour la colonne (la majorité des valeurs détermine le type de la colonne) et ignore toutes les autres valeurs en insérant des valeurs NULL. Mais Excel le fait beaucoup mal (par exemple, si une colonne est considérée comme du texte et que Excel trouve un nombre, décide ensuite que ce nombre est une erreur et insère un NULL à la place. dans une colonne entière de la base de données).
Solution:
Notez que le formatage des colonnes sur une feuille Excel existante n'est pas suffisant.
Il y a une solution de contournement.
C'est tout.
Il semble y avoir une solution vraiment facile pour traiter les problèmes de type de données.
Fondamentalement, à la fin de la chaîne de connexion Excel, ajoutez ;IMEX=1;"
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\YOURSERVER\shared\Client Projects\FOLDER\Data\FILE.xls;Extended Properties="Excel 8.0;HDR=YES;IMEX=1";
Cela résoudra les problèmes de type de données tels que les colonnes où les valeurs sont mélangées avec du texte et des nombres.
Pour accéder à la propriété de connexion, cliquez avec le bouton droit de la souris sur le gestionnaire de connexions Excel situé sous le flux de contrôle et cliquez sur les propriétés. Ce sera à droite sous la solution Explorer. J'espère que cela pourra aider.
Une solution de contournement à prendre en compte:
Les données dans la base de données auront les guillemets une fois l'importation terminée ... vous pourrez les mettre à jour ultérieurement pour supprimer les guillemets, ou utiliser la fonction "remplacer" dans votre requête de lecture, telle que " replace ([dbo ]. [MaTable]. [MaColonne], '' '', '') "