BLOB в строку, SQL Server

у меня есть текстовая строка сохраняется как BLOB тип данных в базе данных. Я хочу извлечь его с помощью запроса SQL select, но у меня проблемы с преобразованием / литьем из BLOB для чтения text.

Я пробовал, например,

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

думаю, мне нужно что-то подобное, но я не могу понять, что именно мне нужно сделать для преобразования. Кто-нибудь может дать мне указания?

в отношении

5 ответов


проблема заключалась, по-видимому, не в SQL server, а в системе навигации, которая обновляет поле. Существует свойство сжатия, которое можно использовать для полей BLOB в NAV, которое не является частью SQL Server. Таким образом, пользовательское сжатие сделало данные нечитаемыми, хотя преобразование работало.

решением было отключить сжатие через конструктор объектов, конструктор таблиц, свойства поля (Shift+F4 в строке поля).

после этого извлечение данных может быть сделано, например, с: выберите конвертировать (varchar (max), cast (BLOBFIELD как двоичный)) из таблицы

Спасибо за все ответы, которые были правильными во многих отношениях!


это зависит от того, как данные были первоначально помещены в столбец. Попробуйте любой из них, как следует работать:

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

или если бы это было просто varchar...

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

я использовал этот скрипт для проверки и тестирования на 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);

вы можете попробовать это:

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

нашел это...

bcp "выберите верхний 1 BlobText из TableName" queryout "C:\DesinationFolder\FileName - ... тхт" -Т-с-с'

Если вам нужно знать о различных вариантах флагов bcp...

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


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;