2009-04-29 2 views
0

Ich lade Daten von DB2 nach SQL2005 hoch. Die Tabelle enthält ein Textfeld, das in DB2 2000 Zeichen lang ist, in SQL jedoch als Varchar (2000) eingerichtet ist.Problem beim Einfügen von Daten in ein varchar-Feld mit einer gespeicherten Prozedur

Wenn ich meine Einfügung in Abfrage-Browser ausführen verarbeitet es einwandfrei und die Daten werden korrekt kopiert, jedoch wenn die gleiche Anweisung in meiner gespeicherten Prozedur ausgeführt wird die Daten für dieses Feld nur falsch kopiert und wird als eine Reihe von seltsamen Zeichen angezeigt .

Das Feld kann gelegentlich Steuerzeichen enthalten, das Problem tritt jedoch auf, auch wenn dies nicht der Fall ist.

Gibt es eine Einstellung, die ich auf meine gespeicherte Prozedur anwenden muss, damit die Einfügung richtig funktioniert?

Oder brauche ich einen Cast oder Konvertieren der Daten, um es richtig angezeigt zu bekommen.

Danke.

Update: Vielen Dank für Ihre Vorschläge. Es scheint nun, dass das Problem von der Software verursacht wurde, mit der wir den Verbindungsserver mit der DB2-Datenbank erstellt haben. Dieses Feld konnte ein Feld mit 2000 Zeichen nicht verarbeiten, wenn es über eine gespeicherte Prozedur ausgeführt wurde, konnte jedoch interaktiv ausgeführt werden.

Ich habe das Problem schließlich gelöst, indem ich das Feld in 10 200 Zeichen lange Felder für den Upload gespleißt habe und sie dann wieder zusammengefügt habe, als sie sich in der SQL-Datenbank befanden.

Antwort

0

Dieses Problem wurde durch die Drittanbietersoftware verursacht, die wir zum Erstellen des Verbindungsservers mit der DB2-Datenbank verwendet haben. Dieses Feld konnte ein Feld mit 2000 Zeichen nicht verarbeiten, wenn es über eine gespeicherte Prozedur ausgeführt wurde, konnte jedoch interaktiv ausgeführt werden.

Ich habe das Problem schließlich gelöst, indem ich das Feld in 10 200 Zeichen lange Felder für den Upload gespleißt habe und sie dann wieder zusammengefügt habe, als sie sich in der SQL-Datenbank befanden.

1

Es klingt wie die Daten aus db2 in einem anderen Zeichensatz sind. Sie sollten sicherstellen, dass es nicht EBCDIC oder etwas ähnliches ist.

Versuchen Sie auch, Ihre gespeicherte Prozedur von SQL Server Management Studio (Abfrage-Browser) aufzurufen, um zu sehen, ob es überhaupt funktioniert.

+0

Die Daten werden jedoch korrekt kopiert, wenn sie im Abfrage-Browser ausgeführt werden. Wenn es ein anderer Zeichensatz wäre, würde es dort auch nicht fehlen? Die gespeicherte Prozedur funktioniert auf alle anderen Arten, nur die Datenkonvertierung für dieses eine Feld verursacht Probleme. – mfdoran

+0

@mfdoran, wie gelangen die Daten in den Abfrage-Browser? kopierst du es irgendwo? Wenn ja, wird Windows beim Einfügen automatisch in ASCII umgewandelt. –

+0

@KMike über eine SQL-Abfrage an die DB2-Datenbank, so dass es kein Windows-Konvertierungsproblem war. Es scheint nun, dass das Problem von der Software verursacht wurde, mit der wir einen Verbindungsserver zur DB2-Datenbank erstellen. Es könnte ein Feld mit 2000 Zeichen verarbeiten, wenn es im Abfrage-Browser ausgeführt wird, konnte es jedoch nicht ausführen, wenn es in einer gespeicherten Prozedur ausgeführt wird. – mfdoran

0

Vielleicht möchten Sie Ihre varchar (2000) zu einem nvarchars (2000) (in der gespeicherten Prozedur sowie die Tabelle - ich nehme an, dass es als ein Parameter existiert). Dies würde ihnen ermöglichen, zwei Byte Zeichen zu halten. Es hängt von der DB2-Konfiguration ab, aber möglicherweise exportiert es UTF-16 (oder Ähnliches) anstelle von UTF-8.

Verwandte Themen