BLOB в строку, SQL Server - PullRequest
       13

BLOB в строку, SQL Server

7 голосов
/ 02 августа 2011

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

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

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

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

С уважением

Ответы [ 5 ]

8 голосов
/ 03 августа 2011

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

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

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

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

4 голосов
/ 02 августа 2011

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

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

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

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

Я использовал этот скрипт для проверки и тестирования на SQL Server 2K8R2:

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 голосов
/ 11 июня 2015
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 голосов
/ 02 мая 2013

Нашел это ...

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

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

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

0 голосов
/ 02 августа 2011

Можете ли вы попробовать это:

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