Benutzer mit den meisten Antworten
SSIS Exec SQL Task: Fehler bei einem aus mehreren Schritten bestehenden OLE-DB-Vorgang

Frage
-
Ich versuche gerade, ein Beispiel aus einem Buch über SSIS-programmierung nachzuvollziehen und für meine Zwecke zu modifizieren:
in einem Execute-SQL-Task wird auf eine Abfrage einer Access2007-DB zugegriffen und das Resultset in eine Variable vom Typ Obejct geschrieben.
Wenn ich per Build Query den SQL-text teste, erhalte ich die richtigen Datensaätze.
Beim Durchlauf erhlate ich eine Warnung 0x0;: Fehler bei einem aus mehreren Schritten bestehenden OLE-DB-Vorgang
Das Paket läuft aber weiter und der Exec-SQL-Schritt wird grün
Ich würde das ja übergehen, aber da der nächste Schritt dann fehlschlägt diese Frag und gleich auch der Verweis auf meinen nächsten Beitrag.
By the way: Wie kann ich den Inhalt der Variable mit dem Resultset testen, ob diese Variable dann auch tatsächlich den gwünschten Inhalt hat ?
Antworten
-
Hallo Stefan,
wie man dem anderen (suboptimal durch Hinweis "verlinktem") Thread entnehmen kann, geht es hier nicht um eine For Each (VB.net) / foreach (C#) Anweisung, sondern um ein SSIS (Integration Services) Paket mit einem Foreach-Schleifencontainer (http://msdn.microsoft.com/de-de/library/ms141724.aspx) und in einem SSIS Paket ist wirklich fast alles Klicki-Bunti und nur selten mal etwas gecoded. Und durchs Zusammenklicken entsteht nicht wirklich Code, sondern "nur" XML mit den Metadaten, das der Task ausführen soll.
Hallo NicoNi,
wenn ich das bei mir nachbaue (inkl. Access MDB als Quelle), funktioniert es einwandfrei und bisher ohne irgendwelche Problem bzgl. Konvertierung oder so.
Die Variablen hatte ich mit verschiedenen Typen angelegt, z.B. einen "Long Integer" auf ich auf eine Int32 Variable gemappt; geht.Hier mal etwas beschrieben, wie ich das Paket angelegt habe:
"SQL ausführen"
Allgemein: ResultSet = Vollständiges Resultset
ResultSet: Ergebnisname = 0 => User:Variable (vom Typ Objekt)
Dazu natürlich die "Connection" und die Abfrage, wo natürlich die Feldnamen explizit aufgeführt sind, also kein SELECT *.
"Foreach-Schleifencontainer"
Auflistung: Enumertor = "Foreach-ADO-Enumerator"
Auflistung: ADO-Objektquellvariable: = User:Variable
+ "Zeilen in der ersten TabelleVariablenzuordnung:
Unter "Variable" gibst Du die Variable an, in die der Skalar-Wert geschrieben werden soll.
Unter "Index" gibst Du den 0-Based Index aus dem Resultset an, d.h. willst Du der Variable das zweite Feld vom Resultset aus "SQL ausführen" als Wert zuweisen, dann gibst Du hier eine 1 an. Die Reihenfolge ist dabei egal; dafür verwendet man ja den Index-Wert.Im Foreach Container habe ich ein Script-Task (http://msdn.microsoft.com/de-de/library/ms141752.aspx) mit einem einfachen
MessageBox.Show(Dts.Variables("MeineVariable").Value))
angelegt, das mir die Werte zur Kontrolle anzeigt (das war ja auch eine Teilfrage aus dem anderen Thread).
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 16. August 2011 11:31
Alle Antworten
-
Ein for-each-loop erhält Daten aus einer object-Variable (siehe mein anderes Posting).
Nun versuche ich die verschiedenen SPalten auf Variablen zu mappen. Die Spaltennumme entnehme ich 0-basiert aus der Exceute-SQL-Anweisung (siehe oben)
Leider erhlate ich trotz (vermeintlich) richtiger Variablentypen für jede Spalte eine Fehlermeldung, z.B. für eine Spalte mit einem long-Wert in der Access-DB 0xC001F009.
Ich habe schon wirr herumprobiert mit Var-Typen, hat aber bisher alles nichts gebracht
- Zusammengeführt Robert BreitenhoferModerator Dienstag, 16. August 2011 11:28 Gleiches Thema
-
Hi,
und wo ist der Code, mit dem Du das versucht hast? Ohne den wird man hier nicht wirklich helfen können.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Da ich mir den for-each-loop zusammenklicke, habe ich keinen Code.
Es geht auch primär um den fro-each-loop und dessen Variablen-mapping.
Aber ich bin inziwschen einen kleinen Schritt weiter:
Im ersten Anlauf hatte ich die Variablen nicht in der reihenfolge ihres Index angegeben;
also etwa so:
Var1 5
Var2 1
Var3 6
usw.
Das scheint nicht zu funktionieren.
Jetzt habe ich die reihenfolge so geändert, dass alle brav hintereinander kommen; also Index 0, 1, 2 ....
-
Hi,
Da ich mir den for-each-loop zusammenklicke, habe ich keinen Code.
Es geht auch primär um den fro-each-loop und dessen Variablen-mapping.
Öhm. Ja. Aber dafür müsste man wissen, was genau Du da eigentlich machst. Und dazu braucht man den Code. Sei es der selbstgeschriebene oder auch der, der vom "Zusammenklicker" Tool erzeugte Code.
Deine Angaben sagen mir persönlich gar nichts. Soll heißen: Ich wüsste nicht mal, was Du da eigentlich wo machst. Daher bitte mal detaillierter beschreiben, in welchem Tool Du was genau wie machst.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community -
Hallo NicoNi,
das kann ich soweit nachvollziehen. Wenn ich eine Access Datei (MDB) als Datenquelle für ein "SQL ausführen" Task (http://msdn.microsoft.com/de-de/library/ms141003.aspx) verwende, bekomme ebenfalls zwei dieser Warning.
Aber der Task läuft sonst fehlerfrei durch, die Datensätze werden vollständig eingelesen und auch an die angegebene Variable übergeben.
Der folgende Task wie ein ForEach Container kann die Werte aus der Variable auch fehlerfrei & vollständig einlesen und abarbeiten ... sofern dieser Task selbst fehlerfrei angelegt ist.To be continued in you other thread (hättest Du vielleicht doch zusammenhängen in einem Thread posten sollen).
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing -
Hallo Stefan,
wie man dem anderen (suboptimal durch Hinweis "verlinktem") Thread entnehmen kann, geht es hier nicht um eine For Each (VB.net) / foreach (C#) Anweisung, sondern um ein SSIS (Integration Services) Paket mit einem Foreach-Schleifencontainer (http://msdn.microsoft.com/de-de/library/ms141724.aspx) und in einem SSIS Paket ist wirklich fast alles Klicki-Bunti und nur selten mal etwas gecoded. Und durchs Zusammenklicken entsteht nicht wirklich Code, sondern "nur" XML mit den Metadaten, das der Task ausführen soll.
Hallo NicoNi,
wenn ich das bei mir nachbaue (inkl. Access MDB als Quelle), funktioniert es einwandfrei und bisher ohne irgendwelche Problem bzgl. Konvertierung oder so.
Die Variablen hatte ich mit verschiedenen Typen angelegt, z.B. einen "Long Integer" auf ich auf eine Int32 Variable gemappt; geht.Hier mal etwas beschrieben, wie ich das Paket angelegt habe:
"SQL ausführen"
Allgemein: ResultSet = Vollständiges Resultset
ResultSet: Ergebnisname = 0 => User:Variable (vom Typ Objekt)
Dazu natürlich die "Connection" und die Abfrage, wo natürlich die Feldnamen explizit aufgeführt sind, also kein SELECT *.
"Foreach-Schleifencontainer"
Auflistung: Enumertor = "Foreach-ADO-Enumerator"
Auflistung: ADO-Objektquellvariable: = User:Variable
+ "Zeilen in der ersten TabelleVariablenzuordnung:
Unter "Variable" gibst Du die Variable an, in die der Skalar-Wert geschrieben werden soll.
Unter "Index" gibst Du den 0-Based Index aus dem Resultset an, d.h. willst Du der Variable das zweite Feld vom Resultset aus "SQL ausführen" als Wert zuweisen, dann gibst Du hier eine 1 an. Die Reihenfolge ist dabei egal; dafür verwendet man ja den Index-Wert.Im Foreach Container habe ich ein Script-Task (http://msdn.microsoft.com/de-de/library/ms141752.aspx) mit einem einfachen
MessageBox.Show(Dts.Variables("MeineVariable").Value))
angelegt, das mir die Werte zur Kontrolle anzeigt (das war ja auch eine Teilfrage aus dem anderen Thread).
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing- Als Antwort markiert Robert BreitenhoferModerator Dienstag, 16. August 2011 11:31
-
Es scheint jetzt zu funktionieren.
Den Druchbruch hat - wie oben bereits beschrieben - die Umgruppierung der Variablen-Zuordnungen gebracht.
Es scheint nicht nur wichtig zu sein, die richtigen Variablen über deren index zuzuordnen, sondern SSIS legt scheinbar auch noch Wert darauf, dass dies in aufsteigender index-Folge passiert.
-
sondern SSIS legt scheinbar auch noch Wert darauf, dass dies in aufsteigender index-Folge passiert.
Hallo NicoNi,ich hatte es extra getestet, die Reihenfolge der Index-Werte in der Variablenauflistung ist egal, die kann man angeben wie man will. Wichtig ist nur, das man keinen verwendet, den es im ResultSet nicht gibt.
Olaf Helper
* cogito ergo sum * errare humanum est * quote erat demonstrandum *
Wenn ich denke, ist das ein Fehler und das beweise ich täglich
Blog Xing