0

SSIS を使用してデータベース テーブルのフラット ファイル エクスポートを作成し、それらをさまざまな分散 SQL Express インストールにインポートしたいと考えています。ご想像のとおり、SSIS は 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) (タブ) があり、行の終わりに char(0d) char(0a) があります (\r\n だと思います)。

これはフォーマットファイルです(4列目は列の幅です):

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 ""

ファイルの先頭から始まるサンプル データ:

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 コードを使用してインポートします。

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

テーブルのフィールドは次のとおりです。

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

利用可能な書き込みはありますか?エラーを修正する方法はありますか?SSIS によって作成されたフォーマット ファイルを取得する方法はありますか? 他のアイデアはありますか?

私の質問を検討していただきありがとうございます。

4

3 に答える 3

1

これは、データ フローのソース部分で失敗していますか? ソースに関連するメタデータを投稿できますか? フラット ファイルで時折、SSIS がフラット ファイル接続でサイズまたはデータ型を正しく推定しないことがわかりました。これが発生すると、データ フロー タスクは、インポートのソース部分で、フラット ファイル接続がその位置で予想される長さを超えるデータを検出するとすぐに失敗します。

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

データフローのどこで実際に壊れているかをお知らせください。

于 2009-04-10T02:16:43.407 に答える
0

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

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

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

于 2009-04-10T15:57:44.167 に答える
0

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

ここで説明したことはすべて、SSIS または一括挿入の問題を示しているようには見えません。ファイル自体の形式に問題があるだけです。

于 2009-04-09T19:08:44.233 に答える