8

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

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

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

2012-08-08T13:31:28.170

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

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

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

2012-08-08 00:00:00.000

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

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

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

4

2 に答える 2

10

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の下に1つの列を定義し、名前EventDateとデータ型をdatabase timestamp [DT_DBTIMESTAMP]

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

次に、フラットファイルソースを右クリックして、を選択しましShow Advanced Editorた。[入力と出力のプロパティ]タブで、フラットファイルソースの出力コントロールを展開し、[出力列]を再度展開して、[イベント日付]を選択しました。[カスタムプロパティ]で、のデフォルト値をFastParseFalseから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
于 2012-08-10T19:38:51.577 に答える
9

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

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

于 2012-08-10T10:21:17.423 に答える