webentwicklung-frage-antwort-db.com.de

BLOB nach String, SQL Server

Ich habe eine Textzeichenfolge, die als BLOB-Datentyp in einer Datenbank gespeichert ist. Ich möchte es durch eine SQL-Auswahlabfrage extrahieren, habe jedoch Probleme beim Konvertieren/Casting von BLOB in lesbare text.

Ich habe es versucht z.

select convert(nvarchar(40),convert(varbinary(40),BLOBTextToExtract))
from [NavisionSQL$Customer]

Ich denke, ich brauche etwas Ähnliches, aber ich kann nicht genau herausfinden, was ich für die Konvertierung benötige. Kann mir jemand bitte eine Wegbeschreibung geben?

Grüße

6
user822448

Problem war anscheinend nicht der SQL-Server, sondern das NAV-System, das das Feld aktualisiert. Es gibt eine Komprimierungseigenschaft, die für BLOB-Felder in NAV verwendet werden kann, die nicht Teil von SQL Server sind. Die benutzerdefinierte Komprimierung machte die Daten jedoch unlesbar, obwohl die Konvertierung funktionierte.

Die Lösung bestand darin, die Komprimierung über den Objekt-Designer, den Tabellen-Designer, die Eigenschaften für das Feld zu deaktivieren (Umschalt + F4 in der Feldzeile). 

Danach kann die Datenextraktion mit z. B. Select convert (varchar (max), cast (BLOBFIELD als binär)) Aus der Tabelle durchgeführt werden

Danke für alle Antworten, die in vielerlei Hinsicht richtig waren!

8
user822448

Es hängt davon ab, wie die Daten ursprünglich in die Spalte eingefügt wurden. Versuchen Sie eine der folgenden Möglichkeiten:

SELECT CONVERT(NVarChar(40), BLOBTextToExtract)
FROM [NavisionSQL$Customer];

Oder wenn es nur varchar... war.

SELECT CONVERT(VarChar(40), BLOBTextToExtract)
FROM [NavisionSQL$Customer];

Ich habe dieses Skript verwendet, um SQL Server 2K8 R2 zu überprüfen und zu testen:

DECLARE @blob VarBinary(MAX) = CONVERT(VarBinary(MAX), 'test');

-- show the binary representation
SELECT @blob;

-- this doesn't work
SELECT CONVERT(NVarChar(100), @blob);

-- but this does
SELECT CONVERT(VarChar(100), @blob);
4
Yuck
CREATE OR REPLACE FUNCTION HASTANE.getXXXXX(p_rowid in rowid) return VARCHAR2
  as
          l_data long;
  begin
         select XXXXXX into l_data from XXXXX where rowid = p_rowid;
         return substr( l_data, 1, 4000);
  end getlabrapor1;
0
imratE

Kannst du das versuchen:

select convert(nvarchar(max),convert(varbinary(max),blob_column)) from table_name
0
visakh

Ich habe es gefunden...

bcp "SELECT top 1 BlobText FROM TableName" Abfrage "C:\DesinationFolder\FileName.txt" -T -c '

Wenn Sie verschiedene Optionen für Bcp-Flags kennen müssen ...

http://msdn.Microsoft.com/de-de/library/ms162802.aspx

0
sam yi