Quelqu'un a-t-il un tutoriel sur la façon d'importer un fichier plat à largeur fixe dans une base de données à l'aide d'un package SSIS?
J'ai un fichier plat contenant des colonnes de longueurs variables.
Column name Width
----------- -----
First name 25
Last name 25
Id 9
Date 8
Comment convertir un fichier plat en colonnes?
Voici un exemple de package créé à l'aide de SSIS 2008 R2 qui explique comment importer un fichier plat dans une table de base de données.
Fixed_Width_File.txt
avec les données comme indiqué dans la capture d'écran. La capture d'écran utilise Notepad ++ pour afficher le contenu du fichier. Il a la capacité d'afficher les caractères spéciaux comme le retour chariot et le saut de ligne. CR LF
désigne les délimiteurs de ligne Retour chariot et Saut de ligne.Dans la base de données SQL Server, créez une table nommée dbo.FlatFile
en utilisant le script de création fourni dans la section Scripts SQL.
Créez un nouveau package SSIS et ajoutez un nouveau OLE gestionnaire de connexion DB qui se connecterait à la base de données SQL Server. Supposons que le gestionnaire de connexion OLE DB Connection soit nommé comme SQLServer.
Double-cliquez sur la tâche de flux de données et vous serez redirigé vers l'onglet de flux de données. Sur l'onglet de flux de données, placez un Source de fichier plat. Double-cliquez sur la source du fichier plat et le Editeur de source du fichier plat apparaîtra. Cliquez sur le bouton Nouveau pour ouvrir l'éditeur Éditeur du Gestionnaire de connexion de fichiers plats.
Dans la section Général de Éditeur de source de fichier plat, entrez une valeur dans Nom du gestionnaire de connexions (dites Source) et accédez à l'emplacement du fichier plat et sélectionnez le fichier. Cet exemple utilise l'exemple de fichier dans le chemin C:\temp\Fixed_Width_File.txt
Si vous avez des lignes d'en-tête dans votre fichier, vous pouvez entrer une valeur 1 dans les lignes d'en-tête pour ignorer la zone de texte pour ignorer la ligne d'en-tête.
69
dans la zone de texte Largeur de ligne. Cette valeur est la somme de la largeur de toutes vos colonnes + 2 pour le délimiteur de ligne. Une fois que vous avez défini la largeur de ligne correcte, vous devriez voir les données du fichier à largeur fixe correctement dans la section Colonnes de données source. Maintenant, vous devez cliquer aux emplacements appropriés pour déterminer les limites des colonnes. Notez les sections 4, 5, 6 et dans la capture d'écran ci-dessous.FirstName
, LastName
, Id
, Date
et RowDelimiter
Id
pour qu'elle soit du type de données four-byte signed integer [DT_I4]
et la colonne Date doivent être de type de données date [DT_DATE]
RowDelimiter
car nous n'en aurons pas besoin.OLE DB Destination
. Connectez la sortie de la source du fichier plat à la destination OLE DB.SQLServer
et définissez le Nom de la table ou la vue déroulant à [dbo].[FlatFile]
Cet exemple devrait vous donner une idée de la façon d'importer un fichier plat à largeur fixe dans la base de données. Il n'explique pas comment gérer la journalisation des erreurs, mais cela devrait vous aider à démarrer et vous aider à découvrir d'autres fonctionnalités liées à SSIS lorsque vous jouez avec des packages.
J'espère que cela pourra aider.
SQL Scripts
:
CREATE TABLE [dbo].[FlatFile](
[Id] [int] NOT NULL,
[FirstName] [varchar](25) NOT NULL,
[LastName] [varchar](25) NOT NULL,
[Date] [datetime] NOT NULL
)
Très bien expliqué, Siva! Votre didacticiel et vos excellentes illustrations soulignent ce que Microsoft aurait dû clarifier
Sans ces deux choses, une tentative d'exécution de l'importation donnera ce message d'erreur: La conversion de données pour la colonne "Colonne x" a renvoyé la valeur d'état 4 et le texte d'état "Le texte a été tronqué ou un ou plusieurs caractères n'avaient aucune correspondance dans la page de codes cible. ".
J'ai ajouté ce texte d'erreur dans l'espoir que quelqu'un trouvera cette page en recherchant la cause de son erreur. Votre turorial vaut la peine d'être trouvé, même si après coup!
Dans la transformation de colonne dérivée, vous pouvez utiliser la fonction SUBSTRING () pour chacune des colonnes. Exemple:
Colonnes dérivéesColonne
FirstName SUBSTRING (Data, startFrom, Length);
Ici, le prénom a une largeur de 25, donc si nous considérons qu'à partir de la position 0, dans la colonne dérivée, vous devez le spécifier en donnant SUBSTRING (Data, 0, 25);
De même pour les autres colonnes.