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
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!
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);
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;
Pouvez-vous essayer ceci:
select convert(nvarchar(max),convert(varbinary(max),blob_column)) from table_name
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 ...