18

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)|
+----------------------------------------------------------------------------------------+

そこで、「列マッピング」ページ(「ソーステーブルとビューの選択」ページで「マッピングの編集...」をクリック)で、宛先タイプを上記のタイプに変更しました。次に、[次へ]をクリックした後、[データ型マッピングの確認]ページで、「」というエラーが表示されます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」が何を意味するのかわかりません。このデータを別のサーバーの新しいテーブルにインポートするにはどうすればよいですか?

助けていただければ幸いです。

4

8 に答える 8

30

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

これを解決するために、クエリを。の代わりにViewthenselectedに入れました。Copy From one or more Tables Or ViewsWrite a query...

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

于 2013-09-27T16:08:43.357 に答える
14

残念ながら、これはバグです。以下のリンクを参照(および投票)してください。

-> SQLServerのインポートおよびエクスポートウィザードがVarcharおよびNVarcharを認識しない

-> SQL 2012 SP1のDTSWizardは、ソースがクエリの場合にnvarchar/varcharデータ型を認識しなくなりました

于 2013-05-16T07:26:21.540 に答える
5

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

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

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

于 2013-02-12T03:15:53.003 に答える
5

長期的な解決策(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.XMLMSSql9ToMSSql8.xmlMSSql10ToMSSql9.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と他のすべてを同じ方法で修正してください!

于 2014-03-06T23:13:03.590 に答える
3

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

于 2014-03-18T19:46:50.827 に答える
2

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

于 2014-07-15T17:58:25.583 に答える
1

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

于 2014-06-18T08:25:38.113 に答える
0

最速の解決策は、インポート/エクスポートウィザードを使用して、同じデータベース(ソース)内の新しいテーブルにデータをエクスポートすることです。次に、新しいテーブルからデータをエクスポートします。どういうわけか、インポート/エクスポートウィザードは、新しいテーブルを作成するときに、魔法のように機能します(実際にはそうではありません)。インポート/エクスポートウィザードを使用することの苦痛を終わらせてくれたJyotiに感謝します。

于 2014-03-26T04:20:20.910 に答える