2008-09-09 5 views
21

Ich versuche, ein DTS-Paket zu erstellen, um Daten zwischen zwei Datenbanken auf demselben Server zu übertragen, und ich erhalte die folgenden Fehler. Ich habe gelesen, dass der Fehler Mehrstufiger OLE DB-Vorgang generiert werden kann, wenn Sie zwischen verschiedenen Datenbanktypen wechseln und es zu einem Genauigkeitsverlust kommt. Dies ist hier jedoch nicht der Fall. Wie überprüfe ich die Spaltenmetadaten?Wie behebe ich die mehrstufigen OLE DB-Operationsfehler in SSIS?

Error: 0xC0202009 at Data Flow Task, piTech [183]: An OLE DB error has occurred. Error code: 0x80040E21. An OLE DB record is available. Source: "Microsoft SQL Native Client" Hresult: 0x80040E21 Description: "Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.".

Error: 0xC0202025 at Data Flow Task, piTech [183]: Cannot create an OLE DB accessor. Verify that the column metadata is valid.

Error: 0xC004701A at Data Flow Task, DTS.Pipeline: component "piTech" (183) failed the pre-execute phase and returned error code 0xC0202025.

Antwort

0

können Sie SELECT * FROM INFORMATION_SCHEMA.COLUMNS benutzen, aber ich vermute, dass Sie die Zieldatenbank aus einem Skript von der Quelldatenbank erstellt, so dass es sehr wahrscheinlich ist, dass sie Spalten gleich sein werden.

Einige Vergleiche könnten jedoch etwas bringen.

Diese Art von Fehlern kommt manchmal von dem Versuch, zu viele Daten auch in Varchar-Spalten einzufügen.

3

Diese Abfrage sollte Spalten identifizieren, die potenzielle Probleme sind ...

SELECT * 
FROM [source].INFORMATION_SCHEMA.COLUMNS src 
    INNER JOIN [dest].INFORMATION_SCHEMA.COLUMNS dst 
     ON dst.COLUMN_NAME = src.COLUMN_NAME 
WHERE dst.CHARACTER_MAXIMUM_LENGTH < src.CHARACTER_MAXIMUM_LENGTH 
0

ich ein ähnliches Problem hatte, als ich Daten aus einer alten Datenbank in eine neue Datenbank zu übertragen, habe ich den oben genannten Fehler. Ich lief dann das folgende Skript

SELECT * FROM [source].INFORMATION_SCHEMA.COLUMNS src INNER JOIN [dest].INFORMATION_SCHEMA.COLUMNS dst ON dst.COLUMN_NAME = src.COLUMN_NAME WHERE dst.CHARACTER_MAXIMUM_LENGTH < src.CHARACTER_MAXIMUM_LENGTH

und fand, dass meine Spalten, in denen etwas anders in Bezug auf Zeichengrößen usw. ich dann versucht, die Tabelle in die neuen Tabellenstruktur zu ändern, die nicht funktioniert hat. Ich habe dann die Daten aus der alten Datenbank nach Excel übertragen und die Daten von Excel in die neue DB importiert, die 100% funktioniert hat.

34

Werfen Sie einen Blick auf die Eigenschaften der Felder (Typ, Länge, Standardwert usw.), sie sollten gleich sein.

Ich hatte dieses Problem mit SQL Server 2008 R2, weil die Länge der Felder nicht gleich sind.

+3

+1 - das funktioniert super. Ich habe gerade den gleichen Fehler behoben, indem ich einen "Memo" -Typ (von meiner Zugriffsquelle db) in einen "DT_WSTR" -Typ in SSIS umgewandelt habe - unter Verwendung einer abgeleiteten Spalte. Wenn ich meine Zeichenfolge als 'DT_WSTR'-Typ hatte, funktionierte das beim Speichern der Zeichenfolge als Nvarchar in meiner SQL 2008 R2-Datenbank sehr gut. –

+0

Mein Problem war ähnlich - Kopieren von einer SQL 2012-Datenbank in MS Access-Tabelle. Der Zieltyp war Text, von dem ich nicht wusste, dass er 255 Zeichen umfasst. Ich habe den Zieltyp in Memo geändert, um diese Einschränkung zu entfernen, und die Datenkopie war erfolgreich. –

7

Dieser Fehler tritt häufig auf, wenn die Quellentabelle eine TEXT-Spalte enthält und das Ziel eine andere als eine TEXT-Spalte ist. Es kann ein echter Zeitfresser sein, wenn Sie dies noch nicht bemerkt haben (oder vergessen haben!).

Konvertieren Sie die Textspalte in einen String und legen Sie die Fehlerbedingung beim Abschneiden auf Ignorieren fest. Dies wird normalerweise als eine Lösung für diesen Fehler dienen.

-1

Dieser Fehler tritt auch auf, wenn versucht wird, eine Einfügung auszuführen, und ein Feld ist nicht null codiert und Nullen versuchen eingefügt zu werden.

-1

Ich habe diesen Fehler beim Übertragen eines CSV zu mssql Ich konvertierte die Spalten in DT_NTEXT und einige Spalten auf mssql wo auf nvarchar (255) gesetzt.

Setzen sie auf Nvarchar (max) löste es.

0

Überprüfen Sie auch, ob das Skript keine Batch-Separator-Befehle hat (entfernen Sie die 'GO'-Anweisungen in einer einzigen Zeile).

0

'-2147217887' message 'IDispatch error #3105' source 'Microsoft OLE DB Service Components' description 'Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.'."

ist, was ich auch mit Blick wurde. Das Problem kam von der Tatsache, dass ich meinen SQLOLEDB.1-Provider in SQLNCLI11 geändert ohne Erwähnung des Kompatibilitätsmodus in der Verbindungszeichenfolge. Wenn ich diese DataTypeCompatibility=80; in der Verbindungszeichenfolge einstelle, habe ich das Problem gelöst.

+0

Wo genau sollte ich das hinzufügen? Wenn Sie dies am Ende hinzufügen, wird eine Fehlermeldung ausgegeben. –

+0

Bitte erzählen Sie mir mehr über den Fehler, den Sie bekommen. –

1

Dieses Problem wird hauptsächlich durch leere Zeilen am Ende der Datei verursacht, entfernen Sie diese und führen Sie den Job aus.