我正在尝试使用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
我已经复制了几张表,但这个欺骗了我。
在数据库的两端,description
字段varchar(8000)
。在 MySql 中,没有描述为空的行,最长的描述只有 5031 个字符。
我尝试在MySql中使用相同的数据结构创建一个新视图,但遇到了相同的错误。我无法确定哪一行的描述字段无效,因为该表包含超过 65000 行。
我还尝试将数据转储到 SQL 文件中,但我在管理工作室中OutOfMemoryException
。转储的 sql 文件本身约为 60 MB。
迁移此数据的任何建议或其他方法?
提前感谢!
在我的测试中,我发现添加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')
然后它起作用了。 转换为字符 (4001) 将失败。
我不清楚 4000 个字符的限制从何而来。
我设法通过在MySql和MSSQL端将数据类型更改为TEXT
来解决此问题。