2009-04-09 28 views
0

SSISを使用してデータベーステーブルのフラットファイルのエクスポートを作成し、次にそれらをさまざまに分散されたSQL Expressのインストールにインポートしたいと考えています。ご想像のとおり、SSISはExpressバージョンでは使用できません。私は一括挿入を行うと、それとのエラー:SQL標準でSSISデータをエクスポートし、SQL Expressで一括挿入を使用してインポートする方法は?

Msg 4866, Level 16, State 8, Line 1 The bulk load failed. The column is too long in the data file for row 1, column 5. Verify that the field terminator and row terminator are specified correctly.

生成されたファイルは、ASCII(1252年)であるフィールドと文字の間でCHAR(09)(タブ)(0D)文字(0A)で行を終了(私はそれが\ r \ nだと思う)。

これはフォーマットファイル(4 COLは、COLの幅)である:サンプルデータの開始

9.0
5
1 SQLCHAR 0 12 "\t" 1 Record_ID ""
2 SQLCHAR 0 498 "\t" 2 Filename SQL Latin1 General CP1 CI AS
3 SQLCHAR 0 498 "\t" 3 Path SQL Latin1 General CP1 CI AS
4 SQLCHAR 0 12 "\t" 4 Width ""
5 SQLCHAR 0 12 "\r\n" 5 Height ""

ファイルの先頭からINGの:

bulk insert item_table from 'Item_Table.txt' with
( FORMATFILE='Item_Table.fmt', FIRSTROW=2)

テーブル:

Record_ID Filename Path Width Height
1437 BreadCakeCooknPie.eps G:\BakedGoods\BreadCakeCooknPie.eps 595 647
1438 CakeChocolateRoses.eps G:\BakedGoods\CakeChocolateRoses.eps 1200 848

私は、次のT-SQLコードでそれをインポートフィールドは次のとおりです。

[Record_ID] [int] NULL,
[Filename] [nvarchar](249) NULL,
[Path] [nvarchar](249) NOT NULL,
[Width] [int] NULL,
[Height] [int] NULL

どれ書き込みアップ利用可能?任意のアイデアはどのようにエラーを修正するには?どのようにSSISによって作成されたフォーマットファイルを取得するか考えていますか?他のアイデア?

ご質問ありがとうございました。

答えて

0

これは部分的な回答です。どうやら、BCPから始めて、書式ファイルとテキストデータダンプを生成させ、bcpの書式ファイルを使用して、SSISのテキストエクスポートと正確に一致させることができます。データファイル内の物理フィールドの配置(フォーマットファイルでそれらを注文することはできますが)、欠落しているフィールド(必要がない場合でも)はキーのように見えません。

手動でテキストエクスポートメタデータをフォーマットファイルと一致させる必要がありました(テキストファイル接続マネージャの列の下のメタデータを手作業でタイプしました)。これにより、テキストファイル内のフィールドの物理的な順序がテーブル内の物理的な順序と一致するようになりました(以前と一致するフォーマットファイルの列を使用しましたが動作しませんでした)。

SSISからエクスポートされたコンテンツは、まだ同じではありませんが、インポートには十分です。たとえば、bcpがデータをエクスポートすると、日付フィールドの後ろに.000、数値フィールドの後ろに.0(フロートなど)が置かれます。

私の最終的なフォーマットファイルは以下の通りです。すべてのフィールドがUnicodeであるにもかかわらず、すべてのフィールドがSQLCHARであること、すべてのサイズが間違っていること(intは10ですが12です)、(テキストは249長さですが498)、私がインポートしたいものだけでなく、フィールドを正しくスキップしていませんでした)。

クレイジーワールド。なぜこれが事実になるのでしょうか?

9.0
29
1 SQLCHAR 0 12 "\t" 1 Record_ID ""
2 SQLCHAR 0 498 "\t" 2 Filename SQL_Latin1_General_CP1_CI_AS
3 SQLCHAR 0 498 "\t" 3 Path SQL_Latin1_General_CP1_CI_AS
4 SQLCHAR 0 498 "\t" 4 Extension_Win SQL_Latin1_General_CP1_CI_AS
5 SQLCHAR 0 498 "\t" 5 Short_Filename_Win SQL_Latin1_General_CP1_CI_AS
6 SQLCHAR 0 498 "\t" 6 Volume SQL_Latin1_General_CP1_CI_AS
7 SQLCHAR 0 24 "\t" 7 Created ""
8 SQLCHAR 0 24 "\t" 8 Last_Modified ""
9 SQLCHAR 0 24 "\t" 9 Cataloged ""
10 SQLCHAR 0 24 "\t" 10 Last_Updated ""
11 SQLCHAR 0 12 "\t" 11 File_Size ""
12 SQLCHAR 0 498 "\t" 12 Mac_File_Type SQL_Latin1_General_CP1_CI_AS
13 SQLCHAR 0 498 "\t" 13 Mac_Creator SQL_Latin1_General_CP1_CI_AS
14 SQLCHAR 0 498 "\t" 14 Mac_Zone SQL_Latin1_General_CP1_CI_AS
15 SQLCHAR 0 12 "\t" 15 Thumbnail_Size ""
16 SQLCHAR 0 12 "\t" 16 Color_Mode ""
17 SQLCHAR 0 30 "\t" 17 Horizontal_Resolution ""
18 SQLCHAR 0 30 "\t" 18 Vertical_Resolution ""
19 SQLCHAR 0 12 "\t" 19 Width ""
20 SQLCHAR 0 12 "\t" 20 Height ""
21 SQLCHAR 0 12 "\t" 21 MultipageCount ""
22 SQLCHAR 0 12 "\t" 22 PlaceHolder ""
23 SQLCHAR 0 12 "\t" 23 Watermarked ""
24 SQLCHAR 0 12 "\t" 24 FileStoreID ""
25 SQLCHAR 0 498 "\t" 25 Directory_Path SQL_Latin1_General_CP1_CI_AS
26 SQLCHAR 0 12 "\t" 26 RID ""
27 SQLCHAR 0 498 "\t" 27 Cataloged_By SQL_Latin1_General_CP1_CI_AS
28 SQLCHAR 0 498 "\t" 28 Updated_By SQL_Latin1_General_CP1_CI_AS
29 SQLCHAR 0 0 "\r\n" 29 File_Description SQL_Latin1_General_CP1_CI_AS

+0

良い答えではありませんが、コマンドラインbcpでは、フォーマットファイルと実際のデータをエクスポートします。フォーマットファイルとまったく同じようにSSISテキストファイルの列(3番目のタブ)をセットアップしました。次に、BCPエクスポートされたデータと一致するようにSSISメタデータをセットアップしました。すべてがうまくインポートされ、一部のデータは日付の秒のように切り詰められます。 –

+0

クール!おめでとう! –

0

パイプまたはカンマ区切り形式でSSISエクスポートを実行したことがありますか?エクスポートとインポートの間にタブ文字がどのように処理されるかに問題がある可能性があります。

ここで説明した内容は、SSISまたは一括挿入の問題を指摘するものではなく、ファイルそのものの形式のものです。

+0

Iは、セミコロンにパイプとEOLにタブを切り替えてみました。それは、そのデータがフィールドのために長すぎると訴える。私は同じ答えでUnicodeと1252の両方を試しました。それは問題がおそらく4バイトのintフィールドに変換されないテキストファイルの10文字として格納されているINTを回しているようだ? –

+0

うーん、それはかなり混乱している。行終端文字(eol)を以前と同じように保つことをお勧めします(\ r \ n)。それが役立つかどうかを見てください。 –

1

これはデータフローのソース部分で失敗しますか?ソースに関するメタデータを投稿できますか?私はフラットファイルで時々見つけました。SSISはフラットファイル接続上でサイズやデータタイプを正しく見積もっていません。この場合、データフロータスクは、その位置でフラットファイル接続が予想される長さを超えるデータを検出すると、インポートのソース部分で失敗します。

これはデータフローの宛先部分で失敗しますか?もしそうなら、実際のターゲットテーブルの代わりにデータリーダをデスティネーションとして使用すれば、少なくとも機能しますか?私はあなたの問題がパイプラインの早い段階であると推測していますが、それがデータフローのソース部分を超えている場合は、少なくとも問題を宛先の問題として分離することができます。

データフローが実際にどこに侵入しているのかをお知らせください。

+0

クエリウィンドウから「一括挿入」を実行すると破損します。 SSISの何もエラーを示していません。奇妙なことに、BCPを使用してフォーマットファイルを含めてディスクにディスクをダンプし、一括して挿入しようとすると、同じエラーで失敗します。 –

+0

また、SP1 2005のSQLとしてテーブルのすべてのフィールドをエクスポートしようとしましたが、bcpと一括挿入が失敗し、ターゲットテーブルよりも少ないフィールドを指定する書式ファイルでバグが発生しました。私はすべてのメタデータがユニコードではないことも確認しました。 –

+0

私はまた、ヘッダー行を削除しようとしました。 –

関連する問題