SSISはExcelソース文字列をフロートに強制的に変更し続けます


9

テキストになっているはずのExcelの列がありますが、SSISはそこに数値テキストを認識し、自動的に倍精度浮動小数点数にします[DT_R8]。

出力ブランチの[外部]列と[出力]列で手動で変更できますが、エラー出力では、対応する列を変更できません。

Error at Extract Stations [Excel Source [1]]: The data type for "output "Excel Source Error Output" (10)" cannot be modified in the error "output column "Group No" (29)".
Error at Extract Stations [Excel Source [1]]: Failed to set property "DataType" on "output column "Group No" (29)".

パッケージのxmlを変更してみました。私が試したIMEX=1し、typeguessrow=0それのどれも私の問題を修正していません。これには修正がありますか?データ型を推測する前に、Excelがデフォルトの8行以上を読み取るようにレジストリを変更することを提案する記事もあります。この方法を使用したくない場合でも、パッケージを実行する予定のマシンでレジストリを変更する必要があるためです。

SQLのnvarcharフィールドにインポートされるExcelフィールドは、たとえば次のようになります。

295.3
296.33

しかし、それらはSQLテーブルに次のように書き込まれます。

295.30000000000001
296.32999999999998

私はデータビューアーを入れ、フィールドが表示されます

295.3
296.33

実行中ずっと正しいですが、OLE DB Destinationソースに到達すると、どういうわけかそれを

295.30000000000001
296.32999999999998

それは間違っています。

また、たとえばV321.1やV213.34などの値もあり、これらは完全に整数ではなく、varcharとして格納する必要があります。


コメントは詳細な議論のためのものではありません。この会話はチャットに移動しました
ポールホワイト9

回答:


2

テキストファイルのようにインポートでき、この問題がない.csvファイルとしてファイルを取得することは可能ですか?SSISとExcelは多くのレベルで一緒にうまく動作しないため、通常はすべてのExcelファイルをキックバックして別の形式を要求します。


1
私は.csvまたはtxtファイルへの変更が近い将来行われることを期待しています。物事がはるかに簡単になります。
ファンベレス

2

この問題を修正する方法はないようです。Excelは列のデータの最初の数行を確認し、常にデータ型をFLOATに強制します。最初の数行(8+)にいくつかのvarchar文字を含むテンプレートを作成するための解決策が与えられたので、EXCELはそれをデータ型として選択し、データをインポートします。私がSource Safeを使用しているため、ファイルを「チェックイン」してパッケージファイルを「読み取り専用」にすることができるので、Visual Studioが定義済みのデータ型を変更できません。


1

ステップ1:IMEX=1; MAXROWSTOSCAN=0接続文字列(例:)を追加しProvider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Source\filename.xlsx;Extended Properties="EXCEL 12.0 XML;HDR=YES;IMEX=1; MAXROWSTOSCAN=0"ます。

ステップ2:ソリューションを閉じます。テキストエディターでSSISパッケージを開き、事前定義されたデータ型に逆戻りし続けた列を見つけます。XMLファイルで手動で更新して、目的の形式にします。

ステップ3:SQL Serverデータツールでパッケージを開いて実行します。これで、ファイルからデータをそのままロードできるようになります。


申し訳ありませんが、ソースデータタイプはパッケージに含まれていません。宛先列タイプのみ。変換は依然としてMicrosoft.Aceドライバー(または選択されたドライバー)で行われ、SSISおよび宛先テーブルに入るときまでにデータ損失が既に発生しているため、これは目的を再び無効にします。
リバースエンジニア
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.