2017-10-30 19 views
2

Ich muss eine Datei in mehrere Datenbanktabellen importieren. Die Datei enthält mehrere gleichzeitige Formate, wie folgt aus:Importieren einer Multiformat-Datei mit Trennzeichen

901 
902|1|Id|Name|Age 
902|2|Id|Region|Address 
902|3|Id|ProductName|ProductType|Price 
903 
1||Adam Sandler|40 
1||Phil Collins|50 
1||Fred Mason|22 
2||Southwest|4000 Cactus Ln. 
2||Northwest|5000 Seahawk Ln. 
3||Surf board|recreation|$30.00 

Tatsächlich wird die „Header“ dieser Datei (Linien mit dem Präfix ‚902‘) gibt an, welche Arten von Dokumenten enthalten sind (Dokumenttyp 1, 2, und 3) und welche Spaltennamen/Mengen jedes Dokument hat. Dann liefert die Datei die tatsächlichen Daten (beginnend nach dem '903' Bezeichner).

Ich muss SSIS (SQL Server 2016) verwenden, um die Daten zu importieren, aber das scheint nicht etwas, für das SSIS integrierte Funktionalität verfügt. Also würde ich gerne Vorschläge hören, wie ich das angehen kann.

Im Moment glaube ich, ich sollte create a custom SSIS source component. Vielleicht erlaubt mir dieser benutzerdefinierte Ansatz, eine doc-type-Eigenschaft zu definieren, die angibt, welchen Dokumenttyp ich importieren möchte (# 1, # 2 oder # 3), und dann würde mein benutzerdefinierter C# -Code die Schwerarbeit übernehmen.

Ist das ein guter Ansatz? Gibt es einen besseren Ansatz? Ich bin sehr stark mit C#.

+0

... in eine "leere" Tabelle in der DB importieren, dann Anweisungen ausführen, die 'WHERE SUBSTRING (Spalte, 1, 1) = '1''? –

Antwort

0

Zu lange um zu kommentieren.

Ich würde C# oder Python oder Batch oder irgendetwas verwenden, um diese in ihre eigenen Dateien zu teilen, bevor sie hochgeladen werden.

Zum Beispiel, eine Datei für # 1, eine für # 2, etc ... Mein Grund für diesen Ratschlag ist, dass Sie nur einen einzigen Dokumenttyp (wie von der Überschrift beschrieben) in eine beliebige Tabelle einfügen. Daher ist es beim Import am besten, nur die Daten zu haben, die für die Tabelle benötigt werden, die Sie in Ihre Datei einfügen. Ich kann mir eigentlich keinen sauberen Weg vorstellen. Sie würden also Datei 1 in Tabelle1, Datei 2 in Tabelle2 und so weiter importieren.

Beachten Sie, dass Sie nicht SSIS für dieses verwenden müssen, wenn Sie möchten, obwohl es verwendet werden könnte.

0

Normalerweise lade ich als Linien mit MASSE

CREATE TABLE #FileContent (Line varchar(2000)); 
    SET @sql='BULK INSERT #FileContent FROM '''[email protected]+''' WITH (ROWTERMINATOR ='''+CHAR(10)+''')' 
    PRINT @sql 
    EXEC(@sql) 

Dann Split-Funktion verwenden, um die Zeilendaten auf Spalten zu teilen jedes Format Zeilen in der Tabelle mal anders.

Verwandte Themen