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 では、説明が null で、最長の説明が 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) で、バージョン 5.1 または 5.2w のいずれかの MySQL ODBC ドライバー 64 ビットを使用して、次のコマンドを実行しました。

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 に答える