将文本blob从Firebird转换为nvarchar到SQL Server

时间:2014-05-29 10:40:44

标签: sql sql-server type-conversion firebird openquery

我正在使用SQL Server并且在我的SQL Server中有一个Firebird数据库作为链接服务器。

我正在尝试OPENQUERYFirebird db中导入数据;

SELECT * FROM OPENQUERY(Workbench, 'SELECT * FROM table_name')

我收到以下错误。

OLE DB provider "MSDASQL" for linked server "Workbench" returned message "Requested conversion is not supported.".
Msg 7341, Level 16, State 2, Line 4
Cannot get the current row value of column "[MSDASQL].NOTES" from OLE DB provider "MSDASQL" for linked server "Workbench". 

NOTES db中的数据类型Firebird字段为blob。如果省略字段NOTES,则执行查询并正确导入结果。

但我需要NOTES字段中的信息,并且正在寻找type cast blob字段到nvarchar的方法。我相信这应该在Openquery内完成(即在查询的Firebird方面)。

有人建议使用纯SQL解决方案将blob转换为nvarchar Firebird吗?

3 个答案:

答案 0 :(得分:1)

查看Microsoft KB OLE DB conversion errors may occur

如果这不适合你 比你的领域注意大文本或相关的小< 32767个字符? 32767 i got from here - limitations in Firebird 如果它很小 - 尝试将其转换为varchar

SELECT CAST(NOTES AS VARCHAR(32767)), other fields FROM TABLE_NAME

首先尝试使用最小的音符和较小的varchar演员 - 并查看它是否有效 如果是,那么可能 - 问题在于blob(

答案 1 :(得分:0)

我认为Firebird blob是MS SQL中的image数据类型,因此转换为varbinary然后转换为varchar应该有所帮助。你试过这个吗?

select cast(cast(NOTES as varbinary(max)) as varchar(max)) from openquery(Workbench,'select * from table_name')

希望有所帮助。

答案 2 :(得分:0)

迟到的答案,但也许它可以帮助某人......

您可以通过以下语句将blob强制转换为varchar:

SELECT CAST(SUBSTRING(BlobColumn FROM 1 FOR 32000) AS VARCHAR(32000)) AS NewBlobColumn
FROM TABLE_NAME

然后你可以在OPENQUERY-Statement

中使用它