web-dev-qa-db-ja.com

SSISが日時列をSQLServer2008にインポートする

SSISを使用してPSVファイルをSQLServer2008にインポートしようとしています。

datatimeを含む1つのフィールドを除けば、すべて正常に機能しています。

インポートされるファイルの内容には、次の形式の日時が含まれています。

2012-08-08T13:31:28.170

PSVファイルのファイルコネクタ設定は、精度の高いデータベースタイムスタンプです[DT_DBTIMESTAMP2]

SQLServerの宛先列にはdatetimeデータ型があります。

SQLテーブルのパッケージ/コンテンツの結果は、日時インポートです。

2012-08-08 00:00:00.000

分/秒がインポートされていないことに気付くでしょう。

間違った日時形式を使用している必要がありますが、すべての組み合わせを試しても成功しなかったようです。

誰かが私を正しい方向に向けることができますか?

8
Paul Ellaway

かつて、問題が宛先ではなくソースにあるという同様の状況がありました。

SourceComponentのフィールドを右クリックし、[高度なエディターの表示]-> [入力および出力プロパティ]-> [[出力列]の展開]-> [列を選択]を選択して、適切なデータ型に変更することをお勧めします(通常は[DT_DBTIMESTAMP]が機能します)私にとっては問題ありません)。また、テストのために、「出力列」でも同じことを行います。

7
Diego

tl; dr

タイプとしてDT_DBTIMESTAMPを使用し、fastParseをtrueに設定します

セットアップ

次の行でCSVを作成しました。 SQL Serverの日時の精度は.003ミリ秒しかないため、これにより、丸めの問題が確実に発生します。

2012-08-08T13:31:28.170
2012-08-08T13:31:28.171
2012-08-08T13:31:28.172
2012-08-08T13:31:28.173

ターゲットテーブルを作成しました

CREATE TABLE [dbo].[datetime2Demo]
(
    [EventDate] [datetime2](7) NOT NULL
,   [insert_date] [datetime2](7) NOT NULL DEFAULT(current_timestamp)
,   [string_type] [varchar](50) NULL
) ON [PRIMARY]

次に、dt_dbtimestampという名前の接続マネージャーを作成し、Advancedの下にEventDateという名前とdatabase timestamp [DT_DBTIMESTAMP]のデータ型で1つの列を定義しました。

データフローでは、フラットファイルソースを追加し、上記の接続マネージャーを使用しました。

次に、フラットファイルソースを右クリックして、Show Advanced Editorを選択しました。 [入力と出力のプロパティ]タブで、フラットファイルソースの[出力]コントロールを展開し、[出力列]を再度展開して、[EventDate]を選択しました。 [カスタムプロパティ]で、FastParseのデフォルト値をFalseからTrueに変更しました

String_type値(DT_STR,20,1252)"DT_DBTIMESTAMP"を追加した派生列があったので、何が機能し、何が機能しなかったかを追跡できました。

OLE DB宛先を使用し、作成したテーブルに接続しました。

結果

SELECT EventDate、string_type FROM dbo.datetime2Demo

EventDate                      string_type
2012-08-08 13:31:28.0000000    DT_DBTIMESTAMP2
2012-08-08 13:31:28.0000000    DT_DBTIMESTAMP2
2012-08-08 13:31:28.0000000    DT_DBTIMESTAMP2
2012-08-08 13:31:28.0000000    DT_DBTIMESTAMP2
2012-08-08 13:31:28.0000000    DT_DATE
2012-08-08 13:31:28.0000000    DT_DATE
2012-08-08 13:31:28.0000000    DT_DATE
2012-08-08 13:31:28.0000000    DT_DATE
2012-08-08 00:00:00.0000000    DT_DBDATE
2012-08-08 00:00:00.0000000    DT_DBDATE
2012-08-08 00:00:00.0000000    DT_DBDATE
2012-08-08 00:00:00.0000000    DT_DBDATE
2012-08-10 13:31:28.0000000    DT_DBTIME2
2012-08-10 13:31:28.0000000    DT_DBTIME2
2012-08-10 13:31:28.0000000    DT_DBTIME2
2012-08-10 13:31:28.0000000    DT_DBTIME2
2012-08-08 13:31:28.1700000    DT_DBTIMESTAMP
2012-08-08 13:31:28.1710000    DT_DBTIMESTAMP
2012-08-08 13:31:28.1720000    DT_DBTIMESTAMP
2012-08-08 13:31:28.1730000    DT_DBTIMESTAMP
8
billinkc