2011-08-02 39 views
5

Tôi có chuỗi văn bản được lưu trữ dưới dạng một loại dữ liệu BLOB trong cơ sở dữ liệu. Tôi muốn trích xuất nó bằng một truy vấn chọn SQL, nhưng tôi có vấn đề chuyển đổi/đúc từ BLOB thành có thể đọc được text.BLOB thành chuỗi, SQL Server

Tôi đã thử ví dụ:

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

Tôi đoán tôi cần một cái gì đó tương tự, nhưng tôi không thể tìm ra chính xác những gì tôi cần thực hiện chuyển đổi. Ai đó có thể cho tôi một số hướng dẫn được không?

Kính trọng

Trả lời

7

Vấn đề dường như không phải là máy chủ SQL, mà là hệ thống NAV cập nhật trường. Có một thuộc tính nén có thể được sử dụng trên các trường BLOB trong NAV, đó không phải là một phần của SQL Server. Vì vậy, nén tùy chỉnh làm cho dữ liệu không đọc được, mặc dù chuyển đổi đã hoạt động.

Giải pháp là tắt nén thông qua Trình thiết kế đối tượng, Trình thiết kế bảng, Thuộc tính cho trường (Shift + F4 trên hàng trường).

Sau đó việc khai thác dữ liệu có thể được thực hiện với ví dụ .: chọn convert (varchar (max), diễn viên (BLOBFIELD như nhị phân)) từ Bảng

Cảm ơn tất cả những câu trả lời đó là đúng bằng nhiều cách!

+0

Tôi đã thử giải pháp của bạn, nhưng tôi nhận được lỗi sau: 'Chuyển đổi rõ ràng từ văn bản kiểu dữ liệu sang biến thể không được phép.' Bất kỳ ý tưởng nào .. ?? – mithilatw

4

Tùy thuộc vào cách dữ liệu ban đầu được đưa vào cột. Hãy thử một trong những là một nên làm việc:

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

Hoặc nếu nó chỉ là varchar ...

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

tôi đã sử dụng kịch bản này để xác minh và thử nghiệm trên 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

với sự đầu tiên, tôi nhận được dấu hiệu chỉ Trung Quốc. Thứ hai trả về D | Z cho mọi thứ. – user822448

+0

Tôi khá chắc chắn văn bản được buộc lưu trữ dưới dạng blob (hình ảnh) – user822448

+0

Bạn đang sử dụng phiên bản SQL Server nào? – Yuck

0

Bạn có thể thử điều này:

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

Điều này chỉ trả về các dấu hiệu của Trung Quốc. Kiểu dữ liệu ngay từ đầu là hình ảnh (mà tôi đoán là 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; 
Các vấn đề liên quan