Zwei Optionen in den Sinn kommen, sind beide Merkmale der can not Say-genug-good-Dinge-über-das-Free-Tool Helper BIDS .
Spalten mit fester Breite erstellen
Die erste ist die Funktion Spalten mit fester Breite erstellen . Es ist so einfach wie Erstellen eines Flat File Managers, der auf die richtige Datei zeigt und 1 Spalte definiert.
Sobald dies erledigt ist, klicken Sie mit der rechten Maustaste zurück auf den Verbindungsmanager und verwenden die kontextsensitive Funktion "Spalten mit fester Breite erstellen ...".

Im nächsten Fenster fügen Sie die tabulatorgetrennte Liste (Excel) in den Editor ein

Oh ja, das ist einfach. Wenn Sie für Spaltentypen und dergleichen einige Anpassungen vornehmen müssen, ändern Sie diese wie gewohnt mit Bearbeiten.
Biml
Ich mag die Business Intelligence Markup Language für meine SSIS-Entwicklung. Es hat viele Vorteile, aber im Grunde genommen sollten Sie es für Dinge wie gottesfürchtige Flatfiles verwenden, insbesondere wenn sie keine Header-Zeilen enthalten (ich sehe Sie an, Sie Mainframes).
Es war oft meine Erfahrung im Umgang mit Legacy-Systemen, dass sie ihre Dateidefinitionen in COBOL-Copybooks haben. Diese Entwickler senden mir Excel-Dateien mit dem Spaltenlayout wie
DATABASE FIELD NAME START LOC LENGTH
SEND.DT 1 STRING(08)
SEND.TIME 9 STRING(08)
DT 17 STRING(08)
TERM 25 STRING(04)
%ZONE 29 STRING(01)
Es ist nichts Besonderes, aber Excel-Formeln haben es kurz gemacht. Also würde ich 4 neue Spalten basierend auf den oben genannten erstellen.
Bereinigter Name (ungültige Zeichen für Spaltennamen entfernt)
=SUBSTITUTE(SUBSTITUTE(B3, ".", "_"), "%", "PCT_")
Länge (extrahiert die Zahlen, beachten Sie, dass dies immer noch eine führende 0 hat, aber es tut nicht weh)
=MID(E3,LEN("STRING(")+1,LEN(E3)-LEN("STRING(")-1)
XML (dies erstellt das tatsächliche XML für eine Flatfile-Definition)
=CONCATENATE("<Column Name=""",F3,""" Length=""",G3,""" DataType=""AnsiString"" ColumnType=""FixedWidth"" CodePage=""1252"" />")
DDL (Könnte auch die Zieltabelle erstellen, während ich dabei bin)
=CONCATENATE(", ", F3, " varchar(", G3, ")")
In der ersten Spalte der DDL wird das Bleikomma gelöscht und dann umbrochen CREATE TABLE dbo.FOO()
Letztendlich führt dieses XML zu etwas, das in ein FlatFileFormatTag geklatscht wird, und dann ist es einfach, die Connections-Sammlung und schließlich das Paket selbst zu erstellen. Sieht viel aus, ist aber eigentlich ziemlich einfach, sobald Sie ein Muster haben.
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
<FileFormats>
<FlatFileFormat
Name="FFF Pickup"
CodePage="1252"
RowDelimiter="CRLF"
IsUnicode="false"
FlatFileType="RaggedRight">
<Columns>
<Column Name="SEND_DT" Length="08" DataType="AnsiString" ColumnType="FixedWidth" CodePage="1252" />
<Column Name="SEND_TIME" Length="08" DataType="AnsiString" ColumnType="FixedWidth" CodePage="1252" />
<Column Name="DT" Length="08" DataType="AnsiString" ColumnType="FixedWidth" CodePage="1252" />
<Column Name="TERM" Length="04" DataType="AnsiString" ColumnType="FixedWidth" CodePage="1252" />
<!--
ad nauseum
-->
<Column Name="RPRTD_PU_PCS" Length="5" DataType="AnsiString" ColumnType="FixedWidth" CodePage="1252" />
</Columns>
</FlatFileFormat>
</FileFormats>
<Connections>
<FlatFileConnection
Name="FF Pickup"
FileFormat="FFF Pickup"
FilePath="C:\ssisdata\Operations\Input\Pickup Report Pickups.txt"
CreateInProject="false"
/>
</Connections>
<Packages>
<Package Name="PickupLoad" ConstraintMode="Linear" ProtectionLevel="DontSaveSensitive">
<Tasks>
<Dataflow Name="DFT Load Pickups" >
<Transformations>
<FlatFileSource
Name="OLE_SRC Pickup"
ConnectionName="FF Pickup"
RetainNulls="true">
</FlatFileSource>
</Transformations>
</Dataflow>
</Tasks>
</Package>
</Packages>
Oh und eine ähnliche Frage von SO mit einer beunruhigend ähnlichen Antwort. Ich wünschte, ich hätte mir Skinners Kommentare angesehen, bevor ich diese Antwort umschrieb.