web-dev-qa-db-fra.com

L'importation de données d'Excel vers SQL Server échoue pour importer toutes les données

J'ai un problème avec l'importation de données d'Excel vers SQL Server à l'aide de l'outil Importer et exporter des données.

En bref, je peux voir les données dans Excel, mais toutes les données ne sont pas importées.

J'ai un classeur Excel contenant une feuille de calcul. Je peux voir les données dans les colonnes et tout va bien. Lorsque j'utilise l'assistant d'importation pour importer les données, je peux voir les colonnes et les données de prévisualisation, mais les données ne sont pas toutes transférées lors de l'exécution de l'importation. Il n'y a pas d'erreur et le processus d'importation se termine - il insère simplement un tas de valeurs NULL dans la table.

Cela semble se produire le plus souvent avec des chiffres - disons que j’ai trois colonnes pour le nom, le nom et le numéro d’identité. Je vais obtenir tous les noms et prénoms, ainsi que certains numéros d'identification. Je ne trouve pas de modèle pour ce qui se passe.

Cela m’était arrivé une fois auparavant et j’ai remarqué qu’il y avait deux feuilles de calcul parmi lesquelles choisir lors du processus d’importation: DataImport et DataImport $ - et le premier échouait comme décrit ci-dessus et le second importait parfaitement. Cette fois, il n'y a qu'une seule feuille de calcul à sélectionner. 

J'utilise principalement un document XLS et l'assistant d'importation 32 bits sur un système 64 bits, mais je suis prêt à essayer n'importe quoi.

Des idées sur la raison pour laquelle il existe deux feuilles de calcul (parfois) et pourquoi cette importation échouerait?

Dave

13
Dave Mroz

La réponse à votre question pourrait impliquer le comment les données sont stockées dans Excel.

Je viens de rencontrer le même problème. J'avais une colonne contenant deux types de valeurs: numérique et numérique avec un tiret. (ex. 51000 et 2009-00949) Je devais les importer en tant que NVARCHAR ou VARCHAR, mais l'assistant d'importation SQL (SQL2005) importait uniquement les valeurs numériques et non les valeurs numériques avec un tiret ou les valeurs numériques avec un tiret , en fonction du type figurant dans le premier enregistrement. Les valeurs non importées auraient une valeur "nulle" dans le champ, rendant mes enregistrements inutiles.

J'ai essayé d'utiliser l'option de menu Format | Cells dans Excel (numérique, texte, général, etc.) et diverses options de mappage dans SQL (nvar, nvarchar, varchar, sqlvariant, float) sans succès.

La solution consistait à utiliser l'option Données | Texte en colonnes dans Excel, et non l'option de formatage de cellule pour stocker la valeur numérique sous forme de texte. Lorsque j'ai utilisé cela sur la colonne, les valeurs numériques (ex. 51000) converties en nombres stockés en tant que valeur de texte (une petite erreur de triangle vert est apparue dans le coin supérieur gauche), les chiffres avec un tiret sont restés sous forme de texte. Je devais laisser les données dans ce format, avec la petite erreur de triangle vert, sinon cela ne pourrait pas être importé avec succès en SQL. Lorsque les données de la colonne ont été stockées dans ce format, les deux types de données de colonne (numérique et numérique avec un tiret) ont été importés correctement avec les autres données d’enregistrement, sans valeur NULL dans la colonne.

33
user3139523

Mon problème était que le fichier que j'importais était un fichier Excel plus ancien et quelque peu décrié. J'ai ouvert le fichier et l'ai enregistré en tant que .xlsx et le fichier a été importé avec succès sans données null par la suite.

2
mcfea

J'ai pu résoudre le problème en triant les données de manière à ce que les données textuelles soient au premier plan. De cette façon, SQL Server savait qu’il s’agissait de données texte et non de données numériques.

1
Wayne Kartchner

Je suis aussi avoir le problème. La seule façon de résoudre ce problème a été d'enregistrer les fichiers .xlsx en tant que fichiers .csv, puis d'utiliser les fichiers .csv dans le fichier d'importation de SQL Server.

Il semblerait que l'intégration entre Microsoft Excel et Microsoft SQL Server serait plus propre.

Mes versions sont les suivantes: Excel 2013 . SQL Server 2012.

0
Dave Benz

J'ai rencontré exactement le même problème L'utilisation de .xlsx file a résolu mon problème.

0
mathewtinuthomas

il semble que l'outil d'importation de SSMS prélève un échantillon des premières lignes «x» pour décider du type de données de la colonne et de ses autres caractéristiques. Par conséquent, s'il choisit une valeur double, il prend les valeurs de texte comme nulles et s'il lit Si vous avez Microsoft Access vous pouvez d’abord utiliser l’import import d’accès qui vous permet de choisir vos propres types de colonnes et de l’enregistrer en tant que fichier d’accès, puis importer l’accès au code SQL. serveur et 'voila', ça marche (du moins pour moi), j'espère que ça aide quelqu'un.

0
waroxx

Vous utilisez l'assistant d'importation, non? Cliquez sur Edit Mappings dans la page "Sélectionner les tables et vues sources" de l'assistant, puis cochez les colonnes Type, Nullable et Size pour chaque colonne source. Il semble que quelque chose ne soit pas correctement cartographié. 

0
Ann L.

Très probablement cette ligne supposée vierge obligeant SQL Server à ignorer le reste des données. Mais pour être sûr, pourriez-vous partager le schéma du fichier Excel et les cinq premières lignes? Les trois bons et les deux prochains enregistrements.

0
Semih Yagcioglu

Sélectionnez toutes les lignes de cette colonne et changez le type en Texte dans Excel puis sélectionnez la colonne entière et changez le type en Texte. 

0
Munam Yousuf

Enfin, le formatage des cellules en général a fonctionné pour moi là où il y a une valeur numérique; auparavant, il montrait% s mais maintenant, il est résolu. 

0
Arpit Attitudish