2011-08-02 109 views
5

Tengo una cadena de texto almacenada como un tipo de datos BLOB en una base de datos. Quiero extraerlo mediante una consulta de selección de SQL, pero tengo problemas para convertir/convertir de BLOB a text legible.BLOB to String, SQL Server

Lo he intentado, p.

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

Supongo que necesito algo similar, pero no puedo entender exactamente lo que necesito para hacer la conversión. ¿Alguien puede darme algunas indicaciones?

Saludos

Respuesta

7

El problema aparentemente no era el servidor SQL, sino el sistema NAV que actualiza el campo. Existe una propiedad de compresión que se puede usar en los campos BLOB en NAV, que no forma parte de SQL Server. Entonces, la compresión personalizada hizo que los datos no se pudieran leer, aunque la conversión funcionó.

La solución fue desactivar la compresión a través del Diseñador de objetos, Diseñador de tablas, Propiedades para el campo (Mayús + F4 en la fila del campo).

Después de que la extracción de los datos se puede hacer con ej .: select convert (varchar (max), yeso (BLOBFIELD como binario)) de la Tabla

Gracias por todas las respuestas que eran correctas de muchas maneras!

+0

He intentado con su solución, pero me aparece el siguiente error: 'No se permite la conversión explícita del texto del tipo de datos a varbinary. ¿Alguna idea ... ?? – mithilatw

4

Depende de cómo los datos se puso inicialmente en la columna. Prueba cualquiera de estos como se debe trabajar:

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

O si era sólo varchar ...

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

que utiliza este script para verificar y probar en 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); 
+0

Con la primera, me sale solo signos chinos. El segundo devuelve D | Z para todo. – user822448

+0

Estoy seguro de que el texto está forzado como blob (imagen) – user822448

+0

¿Qué versión de SQL Server está utilizando? – Yuck

0

se puede probar esto:

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

Esto devuelve solo signos chinos. El tipo de datos desde el principio es la imagen (que supongo que es un BLOB) – user822448

0
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;