web-dev-qa-db-fra.com

BLOB en chaîne, SQL Server

J'ai une chaîne de texte stockée en tant que type de données BLOB dans une base de données. Je souhaite l'extraire à l'aide d'une requête SQL, mais j'ai des problèmes pour convertir/transtyper de BLOB en lisible text.

J'ai essayé par exemple.

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

Je suppose que j'ai besoin de quelque chose de similaire, mais je ne peux pas comprendre exactement ce dont j'ai besoin pour faire la conversion. Quelqu'un peut-il me donner des instructions s'il vous plaît?

Cordialement

6
user822448

Le problème n'était apparemment pas le serveur SQL, mais le système NAV qui met à jour le champ. Il existe une propriété de compression pouvant être utilisée sur les champs BLOB de NAV, qui ne fait pas partie de SQL Server. La compression personnalisée a donc rendu les données illisibles, même si la conversion a fonctionné.

La solution consistait à désactiver la compression via le concepteur d'objet, le concepteur de table, les propriétés du champ (Maj + F4 sur la ligne de champ). 

Après cela, l'extraction des données peut être réalisée avec, par exemple: , Sélectionnez convert (varchar (max), transtypé (BLOBFIELD sous forme binaire)) À partir du tableau

Merci pour toutes les réponses qui ont été correctes à bien des égards!

8
user822448

Cela dépend de la manière dont les données ont été initialement insérées dans la colonne. Essayez l’une ou l’autre comme cela devrait marcher:

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

Ou si c'était juste varchar...

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

J'ai utilisé ce script pour vérifier et tester sur SQL Server 2K8 R2:

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

Pouvez-vous essayer ceci:

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

Trouvé ceci ...

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

Si vous avez besoin de connaître différentes options de drapeaux bcp ...

http://msdn.Microsoft.com/en-us/library/ms162802.aspx

0
sam yi