J'ai plusieurs fichiers Excel qui ont le même format. Je dois les importer dans SQL Server.
Le problème que j'ai actuellement est qu'il y a deux colonnes de texte que je dois ignorer complètement car elles sont du texte libre et la longueur des caractères pour certaines lignes dépasse ce que le serveur me permet d'importer, ce qui entraîne une erreur de troncature.
Étant donné que je n'ai pas besoin de ces colonnes pour mon analyse, la table dans laquelle j'importe n'inclut pas ces colonnes, mais pour une raison quelconque, les packages SSIS reprennent toujours ces colonnes et coupe le travail d'importation à mi-chemin. p>
J'ai essayé d'utiliser la longueur maximale des caractères pour ces colonnes, ce qui entraîne toujours une erreur de troncature.
J'ai besoin de créer un package SSIS qui ignore complètement les deux colonnes sans supprimer les colonnes d'Excel.
4 Réponses :
Si vous créez simplement le package SSIS dans SSDT le fichier Excel peut être interrogé pour ne renvoyer que les colonnes requises. Dans le package, créez un gestionnaire de connexions Excel à l'aide du fichier Excel. Ensuite, dans le flux de contrôle du package, ajoutez une tâche de flux de données qui contient un composant source Excel. Sur cette source, changez le mode d'accès aux données en commande SQL et le fichier peut alors être interrogé de la même manière que SQL. Dans l'exemple suivant, TabName
est le nom de l'onglet Excel contenant les données qui seront renvoyées. Si les noms de tabulation ou de colonne contiennent des espaces, ils devront être placés entre crochets, c'est-à-dire que TabName
sera [Tab Name]
.
Puisque vous avez mentionné dans les commentaires que vous utilisez l'Assistant Import / Export SQL Server. Vous pouvez résoudre ce problème si vous avez une colonne fixe (plage) que vous souhaitez importer (exemple: les 10 premières colonnes).
Dans l'assistant d'importation / exportation, après avoir sélectionné les options de destination, il vous sera demandé si vous voulez lire à partir de tables ou de requêtes:
Sélectionnez l'option de requête, puis utilisez une simple requête de sélection et spécifiez la plage de colonnes après le nom de la feuille. Par exemple:
SELECT * FROM [Sheet1$A:C]
La requête ci-dessus sera lue dans les 3 premières colonnes de Sheet1
puisque A: C représente la plage entre la première colonne Un
et troisième colonne C
.
Vous pouvez maintenant vérifier les colonnes depuis la boîte de dialogue Modifier les mappages :
Vous pouvez utiliser la même logique dans le package SSIS, écrivez simplement la même commande SQL dans Excel Source après avoir changé le mode d'accès en commande SQL.
La solution est simple. J'avais besoin d'écrire une requête qui exclura les colonnes. Ainsi, au lieu de sélectionner «Copier les données d'une ou plusieurs tables», vous sélectionnez «écrire une requête» et excluez les colonnes dont vous n'avez pas besoin. Celui-ci a fonctionné à 100%
Quel outil utilisez-vous pour créer le package SSIS? Il semble qu'un moyen d'ignorer certaines colonnes devrait être évident lors de la création d'un mappage entre la source et une destination.
J'utilise l'assistant d'importation et d'exportation de SQL Server 2017
Parce que ma table n'a pas ces colonnes automatiquement sur le mappage, les colonnes sont ignorées mais la troncature apparaît toujours pour ces colonnes ignorées
Lors de l'importation, lorsque vous cliquez sur la colonne Mapping, le mappage des détails s'affiche. Pour la colonne que vous souhaitez exclure, cliquez sur la liste déroulante du nom de la colonne dans la colonne de destination. Vous y obtiendrez une option Ignorer et en sélectionnant cette option, vous pourrez ignorer les colonnes nécessaires à exclure de votre processus.
@OtshepengDitshego veuillez vérifier l'image ajoutée dans la section réponse.