2017-03-07 38 views
3

非常に単純な問題のようですが、回答が見つからず、暇もなくなってしまいました。私はSSISをかなり新しくしており、背中を蹴っているだけです。SSIS Excelのインポートエラー(切り捨てエラー)

背景:

かなり簡単SSISパッケージSQL ServerのステージングテーブルにExcelシートをインポートします。私は間違った命名法を使用して誰かを誤解させたくないので、ExcelソースをExcelとし、SQL Serverテーブルをターゲットテーブルと呼ぶことにします。

このパッケージは前に働いていました。ただし、日付列のデータ切り捨てが原因で失敗しています。 Excelの列はDATEとしてフォーマットされています(DATEにいくつかの異なる形式のオプションを試しました)。ターゲット列はDATE列(日時ではありません)です。 Excelのデータは、散発的な値が少数である主に空のセルです。私は、日付が(ブランクではなく)データに現れ始めたときにエラーが発生したと思います。

アドバンスドエディタをExcel(&ターゲット)で使用しようとしましたが、多数のデータ型設定を試しましたが、同じエラーが発生しています。私はそれが今私がやった様々なテストでかなり混乱していると思う。

また、日付フィールド「日付[DT_DATE]」のデータ変換トランスフォームを追加しようとしましたが、それは機能しませんでした。そして、私は派生列を作成しようとしました - 最初はExcel列に基づいて、次に変換列に基づいています。これらの試みはすべて失敗しました。

質問:

1)DATE列用のSQL ServerにExcelデータをインポートするためのベストプラクティスは何ですか?

2)これは非常に成熟した2つのMicrosoft Apps(Excel & SQL Server)が連携しているため、単純である必要があります。これは私がここでいくつかの基本的な概念を欠いているに違いないと信じさせてくれます。誰も私をまっすぐに設定すること

3)皆さんはどのようにExcelの日付をSQL Serverに取得しますか?

4)編集後に列を同期させるためのトリックとは何ですか?

あなたが提供できる洞察力をお寄せいただきありがとうございます。かなりシンプルに思えるものを皆さんにお邪魔して申し訳ありません。

デビッド

答えて

1

は個人的に私はそれは常に私のために苦痛で、Excelの日付のベストプラクティスはないと思います。

Excelファイルをフォーマットすることができる場合は、「テキスト」に変更してみてください。それはUnicodeとしてインポートされ、日付はインポートされません。そうでない場合は、「データ変換 」タスクの列をUnicode

に変換してから、「派生列」タスクを使用する必要があります。必要な形式で日付を作成します。

例ソースのyyyy-MM-dd

SUBSTRING(datecolumn,7,4)+ "-" + SUBSTRING(datecolumn,1,2)+ "-" +SUBSTRING(datecolumn,4,2) 

すべきMM/dd/yyyy hh:mm:ss

ビルドは、原油ことが、私の正気を節約可能性があります。

月が何かのときに日付がm/d/yyyyの2つの値を含まないように見える場合は、月の部分にこのようなものをいくつか追加します。

RIGHT("0" + SUBSTRING(datecolumn,1,FINDSTRING(datecolumn,"/"1)-1),2) 

幸運

1

Excelワークシートからデータをインポートする主な問題は、ExcelがExcelの各列が複数のデータ型やフォーマットを持つことができるということですので、同じ列が日付と番号とテキストが含まれていることができるということですまたは異なる形式の日付(一部の形式は暗黙的にSSISの日付に変換できません)。

すべての日付値を日付(ないテキスト)として保存されている場合は、Excelワークシートから日付をインポートすることがベストプラクティスは、ExcelからDATE(ExcelでそれがシリアルのDateTimeと呼ばれている)"0.000000000"数形式に変換することですまたはプログラムあなたがこのLinkを参照するが、以下のように使用することができますMicrosoft.Office.Interop.Excel

のようなライブラリを使用して:

xlCells.NumberFormat = "0.0000000" 

はその後、SSISパッケージの種類DT_DBTIMESTAMPまたはDT_DATEの出力列outColumnを追加し、次のコードを使用し、inColumnが数値型の日付列であると仮定すると、* DateTime.FromOADate()機能

を使用して日に再びそれを変換するために、スクリプトコンポーネントを使用します:

If Not Row.inColumn_IsNull Then 

    Row.OutColumn = DateTime.FromOADate(CDbl(Row.inColumn)) 

Else 

    Row.OutColumn_IsNull = True 

End If 

注:Number形式に列を変換する場合、あなたはすべての形式を無視するが、それでも日付の値を持つ

    0続く
  • は暗黙のうちにSSISで日付に変換することができます日付時刻形式の詳細を読むには、あなたがこのLink

  • を参照することができますExcelで日付時刻の詳細を読むにはSSIS Source Format Implicit Conversion for Datetime

関連する問題