2009-03-26 17 views
0

Ich erstelle eine Select-Anweisung im laufenden Betrieb, weil sich die Spaltennamen und der Tabellenname ändern können, aber alle müssen in dasselbe Datenziel gehen. Es gibt andere Gemeinsamkeiten, die dies möglich machen, wenn ich später darauf eingehen muss. Also, was kommt darauf an: Ich erstelle die Select-Anweisung mit 16 Spalten, es wird immer sechzehn Spalten geben, nicht mehr und nicht weniger, die Spaltennamen können sich ändern und der Tabellenname kann sich ändern. Wenn ich führen Sie das Paket die select-Anweisung gebaut wird nur gut, aber wenn der Datenfluss auszuführen versucht, erhalte ich folgende Fehlermeldung:Die externe SSIS-Metadatenspalte muss entfernt werden

The "external metadata column "ColumnName" (79)" needs to be removed from the external metadata column collection.

Die tatsächliche SQL-Anweisung erzeugt wird, ist:

select 0 as ColumnName, Column88 as CN1, 0 as CN2, 0 as CN3, 0 as CN4, 
     0 as CN5, 0 as CN6, 0 as CN7, 0 as CN8, 0 as CN9, 0 as CN10, 
     0 as CN11, 0 as CN12, 0 as CN13, 0 as CN14, 0 as CN15 from Table3 

Die Die Spalte 'Column88' wird dynamisch erzeugt, ebenso der Tabellenname. Wenn Quellspalten für die anderen 'as CNx'-Spalten vorhanden sind, werden sie genauso angezeigt (Column88 wie CN1, Column89 als CN2, Column90 als CN3 usw.) und der Tabellenname hat immer die Form: Tablex mit x eine ganze Zahl.

Könnte mir bitte jemand helfen, was falsch ist und wie man es repariert?

Antwort

4

Sie sind in gewisser Weise tief hier. Sie sollten es nur so lesen, dass Sie die scheinbaren Spaltennamen oder Typen nicht ändern können. Die Namen und Typen der Eingabespalten werden zu den Namen und Typen der Metadaten, die von der Quelle herunter fließen. Wenn Sie diese ändern, muss alles, was von ihnen abhängt, fehlschlagen.

Die Lösung besteht darin, dafür zu sorgen, dass diese stabil sind, vielleicht durch Verwendung von Spaltenaliasen und -abdrücken. Für eine Tabelle:

SELECT COLNV, COLINT FROM TABLE1

für eine andere

SELECT CAST(COLV AS NVARCHAR(50)) AS COLNV, CAST(COLSMALL AS INTEGER) AS COLINT FROM TABLE2

geben, dass ein versuchen und sehen, ob es für Sie funktioniert. Sie können die Metadaten einfach nicht ändern, ohne den gesamten Rest des Pakets zu reparieren.

0

Ich hatte das gleiche Problem hier, wenn ich eine Spalte aus meiner gespeicherten Prozedur (die in eine temporäre Tabelle ausspuckt) in SQL entfernen und zwei Spalten hinzufügen musste. Um das Problem zu lösen, musste ich jeden Teil meines SSIS-Pakets von Anfang an durchlaufen (Quelle - in meinem Fall zieht es aus einer temporären Tabelle), bis hin zu Ihrem Ziel (in meinem Fall eine flache Dateiverbindung zu einer Wohnung) Datei csv). Ich musste alle Mappings auf dem Weg neu machen und ich beobachtete Fehler in den GUI-Datenfluss-Aufgaben in SSIS.

Dieser Fehler kam für mich in Form eines roten X mit einem Kreis darum, ich schwebte über und es erwähnte das Metadaten-Ding ... Ich doppelklickte darauf und es warnte mich, dass eine meiner Spalten existierte nicht mehr und wollte wissen, ob ich es löschen wollte. Ich habe es gelöscht, aber ich kann Ihnen sagen, dass dieser Fehler mehr damit zu tun hat, dass SSIS Ihnen sagt, dass Ihre Mappings deaktiviert sind und dass Sie jeden Teil Ihres SSIS-Pakets durchlaufen müssen, um sicherzustellen, dass alles korrekt zugeordnet ist.

0

Wie wäre es mit einer Ansicht vor dem Tisch? und Aufruf der Ansicht als SSIS-Quelle. Auf diese Weise können Sie die Spalten nach Bedarf zuordnen und die Funktionen ISNULL oder COALESCE verwenden, um konsistente Spaltenmuster zu erhalten.

Verwandte Themen