web-dev-qa-db-ja.com

テキストが切り捨てられた、または1つ以上の文字がターゲットコードページで一致しなかったExcelファイルからインポートするとき

4つのテキスト列を持つExcelファイルがあります。そのうちの1つは、最も長い値を持つShortDescriptionと呼ばれます。 SQL Server 2008データベースに4つの列を持つテーブルを作成し、ShortDescription列タイプをNvarChar(Max)に設定しました。

しかし、SSISインポートおよびエクスポートダイアログを使用すると、OnTruncationオプションをIgnoreに設定した場合でも、タイトルに前述のエラーが表示されます。

列データをクリアしようとしましたが、成功しました(したがって、問題がShortDescription列にあることを確認しました)。データ全体を別のExcelブックにコピーしようとしましたが、まだ運がありません。

何か案は ???

56
Nour Sabouny

SSISダイアログでExcelソースを使用してこれをインポートしようとしていると思いますか?

その場合、問題はおそらく、SSISがExcelソースを作成するときにスプレッドシートの先頭でいくつかの行をサンプリングすることです。 [ShortDescription]列で大きすぎることに気付かない場合、255文字のテキスト列がデフォルトになります。

したがって、切り捨てなしで大量のデータを含む行を含む列からデータをインポートするには、2つのオプションがあります。

  1. 少なくとも1つのサンプリングされた行の[ShortDescription]列に255文字を超える値が含まれていることを確認する必要があります。これを行う1つの方法は、REPT()関数を使用することです。 = REPT( 'z'、4000)。これは、文字 'z'の4000文字列を作成します。
  2. このような行を含めるには、Jet Excelドライバーによってサンプリングされる行の数を増やす必要があります。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel(システムがx64の場合はHKEY_LOCAL_MACHINE\SOFTWARE\wow6432node\Microsoft\Jet\4.0\Engines\Excelの下)レジストリキーの下のTypeGuessRowsの値を増やすことにより、サンプリングされる行数を増やすことができます。

次の2つのリンクで詳細を確認できます。

さらに説明すると、SSISは、ウィザードの背後にある3つのオブジェクト、Excelデータソースオブジェクト、SQLテーブル宛先オブジェクト、およびそれらの間のデータフロー演算子を作成します。 Excelソースオブジェクトはソースデータを定義し、他の2つのオブジェクトから独立して存在します。そのため、作成時に、説明したサンプリングが行われ、ソース列のサイズが設定されます。そのため、データフロー演算子が実行され、Excelからデータを取得してテーブルに配置しようとする頃には、既に255文字に制限されているデータソースを参照しています。

66
TetonSig

フラットで区切られたファイルからSQL Serverにインポートするときにこの問題が発生しました。解決策は、問題の列の「OutputColumnWidth」値を更新することでした(エラーメッセージから)。インポートウィザードの[データソースの選択]フォームでは、ソースはフラットファイルでした。左端のペインで、「詳細」を選択します。その後、個々の列のプロパティを設定できます。私の場合、ほとんどの列の「OutputColumnWidth」はデフォルトで「50」に設定されていました。フラットファイルから値を切り捨てないように、単純に大きな値に更新しました。

enter image description here

33
Dean

動作させる簡単な方法は、インポートするファイルを編集し、最初の場所に新しい行を作成することです。そうすれば、常にサンプリングされます。次に、255文字を超える列がある場合は、セルに255文字を追加するだけで機能します。インポートしたら、追加したジャンク行を削除します。

8
Kalel Wade

いくつかの漢字といくつかの無効な(大きな)文字列を含む大きなファイルをインポートしようとしたときに、このエラーが発生しました。

テキストファイルはUTF8形式で保存されました。

私の設定:

一般オプション(何も変更しませんでした):

- Locale: English (United States) 
- Unicode: Unchecked
- Code Page: 65001 (UTF-8)

左側に詳細オプションがあります

- DataType (for column): Unicode String [DT_WSTR] (changed)
- OutputColumnWidth: 4000 (that's the maximum) (changed)

データ型マッピングのレビューについて

- On Error: Ignore
- On Truncation: Ignore

ターゲット列の幅は50でした。

これらの設定でエラーは発生しませんでした。

6
live-love

私にとって、このリンクは私を助けました: https://support.Microsoft.com/en-us/kb/189897

  1. セル値が255文字を超える行をExcelの先頭にコピーし、その行をExcelの最初の行にします
  2. 上記のリンクからレジストリ値を変更します。
1
Jaydeep Shil

この問題を解決するには、レジストリコンポーネントの別の場所を変更する必要があります。

で見つからない場合

スタート–> RUN–> RegEdit–> HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Excel

次に見て

スタート–> RUN–> RegEdit–> HKEY_LOCAL_MACHINE->ソフトウェア-> Wow6432Node-> Microsoft-> Jet-> 4.0-> Engines-> Excel

1
Charles Mulwa