我正在使用SQL Server
并且在我的SQL Server中有一个Firebird
数据库作为链接服务器。
我正在尝试OPENQUERY
从Firebird
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
吗?
答案 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
中使用它