2017-04-18 5 views
2

に変換私は、実行中のSSISを作成し、私はSQL Serverの にエラーなしにデータを挿入しようとしましたが、突然、このエラーメッセージがSSISフラットファイルは、[DT_DBTIMESTAMP]カントSQLのDATETIME2

Error: 0xC02020A1 at Data Flow Task, Flat File Source [59]: Data conversion failed. The data conversion for column "SCB_ActualDTime" returned status value 2 and status text "The value could not be converted because of a potential loss of data.".

をポップアップするには、エラーが発生したことを言います

SCB_ActualDTime 
2017-04-16 15:28:07 

からこれらのデータを含む行8にIは、SQLスクリプトを介して同一のデータを挿入しようとしたので、それは実際に奇妙であり、エラーメッセージが存在しません。

+0

で削除してください受信したデータからその行を探して、まだエラーが発生していないかどうかを確認します。 –

答えて

1

Flat Fileは、各列に特定のデータ型を強制するデータソースではありません。そのため、列をDatetimeとして読み取ることを妨げるユニコード文字または空白が含まれる可能性があります。

多くの場合、私はこのようにフラットファイルで作業することにしました。 Flat File Connection Manager

  • iが列の値が推定されたデータ型に変換した後、変換することができるかどうかのチェックするスクリプトコンポーネントを追加するDataFlow Task内の他のデータ型
  • を指定せずにDT_STR列としてすべての列を読み取りそのスクリプトコンポーネント、マークを追加し、日付列名がDataflowTaskでinColumn

    であると仮定すると

inColumnは、入力欄として、入力

enter image description here

として

enter image description here

マークあなたの日付列をVB.NETするdataTypeとDT_DBTIMESTAMP

変更スクリプト言語で新しい出力列outColumnを追加します

出力列を作成するnは、各日付列

enter image description here

のスクリプト内では、Input0_ProcessInputRowにサブ次のようにDateTime.ParseExact機能を使用します。

この例では日付の列がMailReceivingDate

Public Class ScriptMain 
     Inherits UserComponent 


     Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer) 

      If Not Row.MailReceivingDate_IsNull AndAlso 
        Not String.IsNullOrEmpty(Row.MailReceivingDate.Trim) Then 

       Dim dtDate as Date 

       If DateTime.TryParseExact(Row.MailReceivingDate.Trim, "yyyy-MM-dd HH:mm:ss", New System.Globalization.CultureInfo("en-GB"),System.Globalization.DateTimeStyles.None,dtDate) Then 

        Row.OutColumn = dtDate 

       Else 

        'If column cannot be parsed 

        Row.outColumn_IsNull = True 

       End If 

      Else 

        Row.outColumn_IsNull = True 

      End If 

     End Sub 

    End Class 
+0

コード行 'DateTime.TryParseExact(Row.SCBActualDTime.Trim、" yyyy-MM-dd HH:mm:ss "、New System.Globalization.CultureInfo(" en-GB ")、dtDate)でエラーが発生しました。 エラーメッセージには、 'アクセス可能な 'TryParseExact'がこの数の引数を受け入れないため、オーバーロードのレスリングが失敗しました。 BTW私はMicrosoft VB 2012を使用しています。 –

+0

私は引数 'DateTimeStyles'を見逃しました。次のコード' DateTime.TryParseExact(Row.SCBActualDTime.Trim、 "yyyy-MM-dd HH:mm:ss"、New System.Globalization.CultureInfo( "en-GB") 、システム。グローバル化.DateTimeStyles.None、dtDate) ' – Hadi

+0

@VianOjedaGarcia私は私の答えを編集しました。この方法の詳細については、このリンクを参照してください。https://msdn.microsoft.com/en-us/library/system.datetime.tryparseexact(v=vs.110).aspx – Hadi

関連する問題