2

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

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已经复制了几张桌子,但这一张欺骗了我。

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

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

我还尝试将数据转储到 SQL 文件中,但我进入OutOfMemoryException了 Management Studio。转储的 sql 文件本身约为 60 MB。

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

提前致谢!

4

2 回答 2

8

在我的测试中,我发现添加CAST(field as 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 个字符的限制来自哪里。

于 2013-06-06T14:38:21.297 回答
4

我设法通过将数据类型更改为TEXTMySql 和 MSSQL 端来解决此问题。

于 2012-04-12T12:13:59.243 回答