Blob Feld auf SQL Server in andere DB übergeben

30. Juni 2009 14:41

Hallo zusammen,
mein Kunde arbeitet mit NAV 2009 und MS SQL 2008. Auf dem SQL Server gibt es 2 Datenbanken A und B. Auf Datenbank A läuft NAV. B ist eine reine SQL
DB. In DB A habe ich in einer NAV Tabelle ein BLOB Feld welches ich über eine BIGTEXT Variable mit Text fülle - klappt wunderbar.
Auf dem SQLServer wird dieses Feld als Datentyp "Image" angezeigt.
Ich möchte nun dieses Feld in die DB B kopieren (Datentyp Varchar) und dort den Text mittels SQL auslesen.
Wie gehe ich hier am besten vor bez. der Datenkonvertierung? IMAGE -> VARCHAR geht wohl nicht.

Kann mir hier jemand helfen?

Grüße
reD

Re: Blob Feld auf SQL Server in andere DB übergeben

1. Juli 2009 14:14

1. Ich meine irgendwo mal gelesen zu haben, dass NAV die Blobs Base64 codiert.
2. Das ganze in ein varchar-Feld zu bekommen kann schwierig werden. varchar hat eine maximale Länge von 8000 und dem stehen die 2 GB eines NAV-Blobs gegenüber.

Volker

Re: Blob Feld auf SQL Server in andere DB übergeben

1. Juli 2009 15:06

vsnase hat geschrieben:1. Ich meine irgendwo mal gelesen zu haben, dass NAV die Blobs Base64 codiert.

Da scheinst du wohl etwas zu verwechseln.
Um BLOB-Felder per Dataport oder XMLport exportieren zu können, kann man in NAV die BLOB-Daten Base64-codieren sowie -decodieren.
Die Inhalte werden in dem BLOB-Feld jedoch binär gespeichert.

Probleme mit dem externen Zugriff auf diese Felder können auftreten, wenn in dem BLOB-Feld das Property "Compressed" auf Yes steht, denn dann ist der Inhalt komprimiert worden, um Speicherplatz in der DB zu sparen.
Möglicherweise hilft es, das Property auf No zu setzen, denn dann müssten in dem BLOB-Feld die Original-Rohdaten stehen.
(Reine Vermutung von mir, hatte bisher noch nie die Notwendigkeit.)

Re: Blob Feld auf SQL Server in andere DB übergeben

1. Juli 2009 15:18

OK, dann mal andersrum. Komprimiert womit? Und kann ich im SQL-Server irgendwie erkennen ob kompriemiert oder nicht?

Volker

Re: Blob Feld auf SQL Server in andere DB übergeben

1. Juli 2009 15:42

vsnase hat geschrieben:Komprimiert womit?
Wenn ich das wüsste ...

vsnase hat geschrieben:Und kann ich im SQL-Server irgendwie erkennen ob kompriemiert oder nicht?
Ich befürchte, dass es nicht erkennbar ist.

Re: Blob Feld auf SQL Server in andere DB übergeben

1. Juli 2009 16:49

Der Zufall will es, dass ich dieses Problem neulich auch hatte und nach langer Suche auch eine Lösung fand.

Wenn das BLOB-Feld nicht komprimiert ist, dann klappt die Konvertierung von Image nach varchar(max) über einen Zwischenschritt:

Image -> varbinary(max) -> varchar(max)

Code:
CONVERT(varchar(max),CONVERT(varbinary(max),[<IMAGEFeld>]))


Klappt zumindest bei importierten Textdateien.

Beste Grüße
Falk

Re: Blob Feld auf SQL Server in andere DB übergeben

27. April 2013 09:19

Ich muss mal dieses alte Thema rauskramen.
FAFL hat geschrieben:...
Code:
CONVERT(varchar(max),CONVERT(varbinary(max),[<IMAGEFeld>]))


Klappt zumindest bei importierten Textdateien.

Beste Grüße
Falk


Das sieht im Ansatz gut aus, nur ich habe Probleme mit den Umlauten.

Statt äöüÄÖÜ kommt „”Ž™š raus.

Hat da einer einen Tipp für mich?

Volker

Re: Blob Feld auf SQL Server in andere DB übergeben

29. April 2013 09:40

Wenn man berücksichtigt, dass NAV wohl die Codepage 437 zur Datenspeicherung verwendet kann man das richtige Ergebnis rausbringen. Es kann ja so einfach seni...

Volker