SQL Serverインポートおよびエクスポートウィザードを使用して、サーバーの1つのデータベースから別のサーバーの新しいテーブルにデータをインポートしようとしています。 (SQL Server Management Studio 2012)
ウィザードで、「転送するデータを指定するクエリを作成する」にチェックを入れると、SQLステートメントが次の4つの列を含むデータを返します。
_+-----------------------------------------------------------------------------+
| ID(varchar(100)) | Title(text) | Description(text) | IsActive(tinyint)|
+-----------------------------------------------------------------------------+
_
新しいテーブルのタイプを次のように変更したい
_+----------------------------------------------------------------------------------------+
| ID(varchar(4)) | Title(varchar(200)) | Description(varchar(2000)) | IsActive(bit)|
+----------------------------------------------------------------------------------------+
_
そこで、「列マッピング」ページ(「ソーステーブルとビューの選択」ページ)で、「Edit Mappings ... ")、宛先タイプを上記のタイプに変更しました。次に、「次へ」をクリックした後、「データ型マッピングの確認」ページで、「Found 3 unknown column type conversion(s). You are only allowed to save the package
」というエラーが表示されます
データ型マッピングには、次の情報が表示されます。
_icon Source Column Source Type Destination Column Destination Type Convert
----------------------------------------------------------------------------------
error ID 200 ID varchar
error Title 200 Title varchar
error Description 201 Description varchar
warning IsActive tinyint IsActive bit
_
「マッピングの編集...」ページでデータタイプを変更しなくても、同じエラーが発生します。
データタイプのコンテキストで「200」の意味がわかりません。このデータを別のサーバーの新しいテーブルにインポートするにはどうすればよいですか?
どんな助けにも感謝します。
少し実験をすると、このエラーはソースとしてクエリがある場合にのみ発生するようです。フラットファイルにコピーすると同じエラーが発生するため、承認された回答は機能しませんでした。
これを解決するには、クエリをView
に入れてから選択しますCopy From one or more Tables Or Views
の代わりに Write a query...
。
その後、通常どおりウィザードを実行しましたが、データはエラーなく通過しました
残念ながらこれはバグです。以下のリンクを参照(および投票)してください。
-> SQL ServerのインポートとエクスポートWizardがVarcharとNVarcharを認識しない
そして
-> ソースがクエリの場合、SQL 2012 SP1のDTSWizardはnvarchar/varcharデータ型を認識しなくなります
長期的な解決策(Microsoftによる修正のほか)(またはすでに解決済みか?)も、投稿された回答からのいくつかのリンクです。
影響を受けるマシンには、各変換タイプのコードから値へのマッピングを定義するxmlファイルがあります。
「200」と「201」で失敗の原因となっているのは、マッピングが見つからないことです
....まあ、それは「200/201」として到達するべきではありませんでしたが、そうであったように、マッピングされたことを願っています
このような構成で遊ぶ場合は、手動で挿入できます。
ここで私は答えを得ました、かなり下のページ: http://social.msdn.Microsoft.com/Forums/sqlserver/en-US/97ff1f01-c02a-4c9a-b867-8eaecc464cfb/2012 -sp1-no-longer-recognizes-common-data-types?forum = sqlintegrationservices
マッピングファイルはC:\ Program Files(x86)\ Microsoft SQL Server\110\DTS\MappingFiles \にあります
(または同等のもの)
ソースから宛先への変換のタイプごとに1つあります。
SQL Server間の移動については、次のようなものを見てください。
MSSQLToSSIS10.XML
MSSql9ToMSSql8.xml
MSSql10ToMSSql9.xml
あなたが見るところ
<!-- varchar -->
<dtm:DataTypeMapping >
<dtm:SourceDataType>
<dtm:DataTypeName>varchar</dtm:DataTypeName>
</dtm:SourceDataType>
<dtm:DestinationDataType>
<dtm:CharacterStringType>
<dtm:DataTypeName>DT_STR</dtm:DataTypeName>
<dtm:UseSourceLength/>
</dtm:CharacterStringType>
</dtm:DestinationDataType>
</dtm:DataTypeMapping>
「200」マッピングを追加して、最終的に一致するように一致させます。
<!-- varchar -->
<dtm:DataTypeMapping >
<dtm:SourceDataType>
<dtm:DataTypeName>varchar</dtm:DataTypeName>
</dtm:SourceDataType>
<dtm:DestinationDataType>
<dtm:CharacterStringType>
<dtm:DataTypeName>DT_STR</dtm:DataTypeName>
<dtm:UseSourceLength/>
</dtm:CharacterStringType>
</dtm:DestinationDataType>
</dtm:DataTypeMapping>
<dtm:DataTypeMapping >
<dtm:SourceDataType>
<dtm:DataTypeName>200</dtm:DataTypeName>
</dtm:SourceDataType>
<dtm:DestinationDataType>
<dtm:CharacterStringType>
<dtm:DataTypeName>DT_STR</dtm:DataTypeName>
<dtm:UseSourceLength/>
</dtm:CharacterStringType>
</dtm:DestinationDataType>
</dtm:DataTypeMapping>
同じ方法でnvarcharとその他を修正します!
ウィザードを使用してテキスト列をvarchar列に挿入することはできないと思います。テーブルの大きさによっては、SSMSを介してソースをcsvにエクスポートしてからインポートできます。これでうまくいくはずですが、インポートするテーブルが複数ある場合は、リンクサーバーを追加できます。次に、次のように古いテーブルまたは新しいテーブルを修飾します。
insert into [new_server].database.dbo.tablename
select * from old_table
SQL2000はリンクサーバーを作成するのに苦労しますが、テキスト列があるため、これはエクスポート元のサーバーだと思います。
SQLで文字フィールドをchar(##)としてキャストし、宛先データ型をvarchar(##)に変更することで、これを回避できました。フィールドを使用する前にトリミングが必要な場合がありますが、インポートは機能します。
これは バグ であり、 SQL SERVER 2012 SP2 で修正されました。
設定やビューなどをいじる必要はありません。 SSISパッケージを保存し、エクスプローラーでダブルクリックして実行します。これにより、「パッケージ実行ユーティリティ(ManagementStudioフォルダーのDTExecUI.exe)」が起動し、エラーなしでパッケージが実行されます。
最速の解決策は、インポート/エクスポートウィザードを使用して、同じデータベース(ソース)の新しいテーブルにデータをエクスポートすることです。次に、新しいテーブルからデータをエクスポートします。どういうわけか、インポート/エクスポートウィザードは、新しいテーブルを作成するときに彼の魔法(実際ではない)を機能させます。インポート/エクスポートウィザードを使用するのが面倒だったJyotiに感謝します。