web-dev-qa-db-ja.com

SQL Serverインポートおよびエクスポートウィザードのソースタイプ200?

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」の意味がわかりません。このデータを別のサーバーの新しいテーブルにインポートするにはどうすればよいですか?

どんな助けにも感謝します。

18
kabichan

少し実験をすると、このエラーはソースとしてクエリがある場合にのみ発生するようです。フラットファイルにコピーすると同じエラーが発生するため、承認された回答は機能しませんでした。

これを解決するには、クエリをViewに入れてから選択しますCopy From one or more Tables Or Views の代わりに Write a query...

その後、通常どおりウィザードを実行しましたが、データはエラーなく通過しました

30
Shoe
13
Andrey Morozov

長期的な解決策(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とその他を修正します!

5
Mike M

ウィザードを使用してテキスト列をvarchar列に挿入することはできないと思います。テーブルの大きさによっては、SSMSを介してソースをcsvにエクスポートしてからインポートできます。これでうまくいくはずですが、インポートするテーブルが複数ある場合は、リンクサーバーを追加できます。次に、次のように古いテーブルまたは新しいテーブルを修飾します。

insert into [new_server].database.dbo.tablename
select * from old_table

SQL2000はリンクサーバーを作成するのに苦労しますが、テキスト列があるため、これはエクスポート元のサーバーだと思います。

5
darin

SQLで文字フィールドをchar(##)としてキャストし、宛先データ型をvarchar(##)に変更することで、これを回避できました。フィールドを使用する前にトリミングが必要な場合がありますが、インポートは機能します。

3
Jeff

これは バグ であり、 SQL SERVER 2012 SP2 で修正されました。

2
zs2020

設定やビューなどをいじる必要はありません。 SSISパッケージを保存し、エクスプローラーでダブルクリックして実行します。これにより、「パッケージ実行ユーティリティ(ManagementStudioフォルダーのDTExecUI.exe)」が起動し、エラーなしでパッケージが実行されます。

1
colivier

最速の解決策は、インポート/エクスポートウィザードを使用して、同じデータベース(ソース)の新しいテーブルにデータをエクスポートすることです。次に、新しいテーブルからデータをエクスポートします。どういうわけか、インポート/エクスポートウィザードは、新しいテーブルを作成するときに彼の魔法(実際ではない)を機能させます。インポート/エクスポートウィザードを使用するのが面倒だったJyotiに感謝します。

0
Sal Young