web-dev-qa-db-ja.com

SSIS SQL Server 2008エラー

SSISを使用してソースからSQL Server 2008データベースにデータをインポートする方法を知りたいだけです。

私は単純なtxtファイルを持っています(実際にはこのブログからです: http://blog.sqlauthority.com/2008/02/06/sql-server-import-csv-file-into- sql-server-using-bulk-insert-load-comma-delimited-file-into-sql-server /

1,James,Smith,19750101
2,Meggie,Smith,19790122
3,Robert,Smith,20071101
4,Alex,Smith,20040202

SQL Serverで新しいテーブルを作成しました。

CREATE TABLE Test
(ID INT,
FirstName VARCHAR(50),
LastName VARCHAR(50),
BirthDate SMALLDATETIME)

データフロータスクをドラッグしてから、フラットファイルソースとOLE DB Destination。

新しいフラットファイル接続を作成し、テキストファイルを選択すると、[詳細設定]タブに4つの列があるため、次のようにデータ型を変更しました。

  • 列0:2バイトの符号付き整数[DT_I2]
  • 列1:文字列[DT-STR]-Outputcolumnwith:20
  • 列2:文字列[DT-STR]-Outputcolumnwith:20
  • 列3:精度のあるデータベースタイムスタンプ[DT_DBTIMESTAMP2]

次に、新しいOLB DE接続をセットアップして編集し、[テーブルまたはビューの名前]の下に[dbo]。[Test]を設定します。+各列を入力から宛先にマップします。

しかし、それを実行すると、これらのエラーが発生しました:

警告:SSIS警告コードDTS_W_MAXIMUMERRORCOUNTREACHED。 Executionメソッドは成功しましたが、発生したエラーの数(4)
最大許容数(1)に達しました失敗に終わります。これは、エラーの数がMaximumErrorCountで指定された数に達したときに発生します。 MaximumErrorCountを変更するか、エラーを修正してください。

エラー:データフロータスクでの0xC02020A1、フラットファイルソース[52]:データ変換に失敗しました。列「列3」のデータ変換は、ステータス値2およびステータステキスト「データが失われる可能性があるため、値を変換できませんでした。」を返しました。

エラー:データフロータスクでの0xC0209029、フラットファイルソース[52]:SSISエラーコードDTS_E_INDUCEDTRANSFORMFAILUREONERROR。エラーコード0xC0209084が発生したため、「出力列「列3」(90)」は失敗し、「出力列「列3」(90)」のエラー行の処理は、エラーの失敗を示しています。指定されたコンポーネントの指定されたオブジェクトでエラーが発生しました。この前に、失敗に関する詳細情報を含むエラーメッセージが表示される場合があります。

エラー:データフロータスク0xC0202092、フラットファイルソース[52]:データ行1のファイル "D:\ New folder\text.txt"の処理中にエラーが発生しました.

エラー:データフロータスクでの0xC0047038、SSIS.Pipeline:SSISエラーコードDTS_E_PRIMEOUTPUTFAILED。コンポーネント「フラットファイルソース」(52)のPrimeOutputメソッドは、エラーコード0xC0202092を返しました。パイプラインエンジンがPrimeOutput()を呼び出したときに、コンポーネントが失敗コードを返しました。障害コードの意味はコンポーネントによって定義されますが、エラーは致命的であり、パイプラインは実行を停止しました。この前に、失敗に関する詳細情報を含むエラーメッセージが表示される場合があります。

私の場合、正常にインポートされない原因は何ですか?

Windows 7で評価版を使用しています。

本当にありがとう!

FINALLY I COULD IMPORT FROM TXT FILE TO SQL 2008 DATABASE,

LET'S NAME THE 4 COLUMNS AND THEIR DATA TYPE AS :

id : two-byte signed integer [DT_I2]
firstname : String[DT-STR] - Outputcolumnwith :20
lastname: String[DT-STR] - Outputcolumnwith :20
yeardate: String[DT-STR] - Outputcolumnwith :20

THEN IN DERIVED COLUMN EDITOR :

Derived column name : yeardate
Derived column : replace 'yeardate'
Expression : (DT_DBTIMESTAMP)(SUBSTRING(yeardate,1,4) + "-" + SUBSTRING(yeardate,5,2) +     "-" + SUBSTRING(yeardate,7,2))
2
Thanh Nguyen

あなたはかなりよく知られた問題に遭遇しました。 SSISがデータをインポートしようとすると、ロケールに対応した変換が行われ、YYYYMMDD形式はうまく変換されません。ソリューションで概要を説明した「文字列としてインポートして実際の日時に変換する」アプローチを使用できますが、SSISに非常にスマートになるのをやめるようにネイティブアプローチを使用するよりも遅く、多くのリソースを消費します。

フラットファイルソースを右クリックし、[詳細エディターの表示]を選択します。入力プロパティと出力プロパティで、出力列を展開し、列(BirthDate)を見つけて、FastParseプロパティをFalseからTrueに変更します。

Fast parse settings

その変更のみで、パッケージは正常に実行されます

Success

また、同じ問題について 優れた回答 SOから

6
billinkc

19750101はsmalldatetimeに変換できません。

書式設定の問題はかなり確実です。

派生列を追加して、テキストファイルの値をSQL Serverに挿入できる形式にフォーマットしてください

3
Diego