66

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

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

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

何か案は ???

4

7 に答える 7

71

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 文字に制限されたデータ ソースを既に参照しています。

于 2011-12-25T09:49:55.073 に答える
35

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

ここに画像の説明を入力

于 2014-04-21T13:33:52.923 に答える
9

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

于 2014-06-10T15:46:46.163 に答える
6

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

テキストファイルは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 でした。

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

于 2014-05-15T15:19:13.020 に答える