Importieren einer großen Spalte (8000 Zeichen) aus Excel mit SSIS


7

Ich versuche, einen regelmäßigen Import einer Excel-Tabelle einzurichten, die wir von einem Anbieter erhalten. Ich verwende SQL 2008 R2 SSIS, um es in eine Tabelle zu importieren. Der Problemverbindungsmanager ist eine OLE DB-Verbindung zur Tabelle. Die Tabelle ist Excel 2005. Der Datenbankverbindungsmanager verwendet Native OLE DB \ SQL Native Client.

Das Problem, das ich bekomme, ist, dass die OLE DB-Quelle immer wieder einige der Excel-Spalten DT_WSTRmit einer 255Länge festlegt . Ich habe jedoch 2 Spalten mit 4000 bzw. 8000 Zeichen. Ich habe die Registerkarte Advanced Editor/ Input and Output Propertiesfür die OLE DB-Quelle aufgerufen und den Datentyp / die Länge in der External ColumnsListe und der Output ColumnsListe geändert . Leider erscheint beim Verlassen Advanced Editorein Fehler in der Fehlerliste.

Validation error. Data Flow Task: Data Flow Task: The output column "ColumnName" (226)
on the error output has properties that do not match the properties of its 
corresponding data source column.

Wenn ich erneut auf die Quelle klicke, erhalte ich die Option, die Fehler automatisch zu "beheben". Ich wähle dann "Ja" und "OK". Der Fehler ist jetzt weg, aber wenn ich zurück zum External ColumnsDatentyp / zur Länge gehe, sind die Einstellungen wieder auf dem Original DT_WSTR/255.

Ich könnte die Tabelle manuell in eine begrenzte Datei ändern, um das Problem zu vermeiden, würde aber lieber keinen manuellen Schritt in den Prozess einfügen. Kennt jemand eine Möglichkeit, eine Excel-Quelle zu erhalten, die eine lange Spalte zulässt?


Verwenden Sie die Datenkonvertierungskomponente?
Kin Shah

1
Tritt nur ein Fehler beim Ändern der Länge der 8k-Spalte auf oder tritt dies sowohl bei der 8k- als auch bei der 4k-Definition auf? Sind Sie offen für andere Methoden zum Lesen von Excel-Daten mit SSIS als den Excel Connection Manager?
Billinkc

@Kin, ich komme nicht zur Datenkonvertierungskomponente. Ich habe einen Link für fehlgeschlagene Zeilen, der alles über 255 Zeichen (Kürzungsfehler) in eine separate Tabelle sendet. Ich verwende später eine Datenkonvertierungskomponente, um von DT_WSTRzu zu wechseln , DT_STRaber derzeit kann ich für diese Zeilen nicht so weit kommen.
Kenneth Fisher

@billinkc Der Fehler tritt auf, wenn ich den Wert auf etwas anderes als die ursprünglichen 255 Zeichen ändere. Ich bin mehr als glücklich, etwas anderes als einen Excel-Verbindungsmanager zu verwenden. Meine einzige Anforderung an dieser Stelle ist, dass es sich um einen automatisierten Prozess handelt, den ich meinen Entwicklern erklären kann, damit sie ihn unterstützen können.
Kenneth Fisher

Antworten:


5

Wir haben das Problem endlich gelöst. Es stellt sich heraus, dass SSIS die Länge basierend auf der ersten Handvoll Zeilen in der Excel-Datei berechnet. Als wir die Zeilen mit den längeren Daten nach oben verschoben haben, wurden die Spalten in Unicode-Text geändert (unter Berücksichtigung der zusätzlichen Länge).


0

Sie können einen großen Text in kleinere Abschnitte in den Zeilen aufteilen und diese in einen foreach-Schleifencontainer laden.

Declare @maxRowLength int = 50;
with x as (
select 'Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry''s standard dummy text ever since the 1500s. Over the years, sometimes by accident, sometimes on purpose (injected humour and the like).' data
),
tmp(data,c,rn) as (
select data,SUBSTRING(data, 1,@maxRowLength),@maxRowLength
from x
union all
select data,SUBSTRING(data,rn,@maxRowLength),rn + @maxRowLength
from tmp
where rn < len(data)
)
select c,rn from tmp
OPTION (MAXRECURSION 500);

Weitere Informationen finden Sie hier

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.