数据库
首页 > 数据库> > 使用带有MySQL链接服务器的openquery,宽varchar字段导致“不支持请求转换”错误

使用带有MySQL链接服务器的openquery,宽varchar字段导致“不支持请求转换”错误

作者:互联网

我正在尝试使用openquery将表从MySql迁移到MSSQL但我不断收到以下错误消息:

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

我正在尝试运行的SQL查询:

insert into dbo.tickets (id, description, createdAt)
select * from openquery(MYSQL, 'select * from mydb.tickets')

有了openquery,我已经复制了几张桌子,但这个让我很烦.

在数据库的两侧,描述字段是varchar(8000).在MySql中没有描述为null的行,最长的描述只有5031个字符.

我尝试使用相同的数据结构在MySql中创建一个新视图,但是得到了相同的错误.
我无法确定哪一行具有无效的描述字段,因为该表包含超过65000行.

我也尝试将数据转储到SQL文件中,但我在Management Studio中得到了OutOfMemoryException.转储的sql文件本身大约是60 MB.

有关迁移此数据的任何建议或其他方式吗?

提前致谢!

解决方法:

在我的测试中,我发现添加CAST(字段为char(4000))也解决了这个问题.

我在MySQL 5.1数据库中创建了以下内容:

create table tmp_patrick (summary_text varchar(4096));
insert into tmp_patrick values ('foo');

当我在SQL Server 2008 R2 SP1(10.50.2500)上执行以下操作时,使用MySQL ODBC驱动程序64位,版本5.1或5.2w:

select * from openquery(MYSQL, 'select summary_text from scratch.tmp_patrick')

它会生成错误:

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

但如果我添加CAST:

select * from openquery(MYSQL, 'select CAST(summary_text as char(4000)) from scratch.tmp_patrick')

然后它工作.转换为char(4001)将失败.

我不清楚4000字符限制的来源.

标签:mysql,sql,sql-server,odbc,openquery
来源: https://codeday.me/bug/20190715/1470011.html