0

SSIS パッケージは、txt ファイルから sql データベースにインポートするだけです。パッケージを作成したとき、古いファイルを使用していて、その実行はうまくいきました。古いソース ファイルは (10 列)、新しいソース ファイルは 15 列になりました。ソースファイルがその失敗を変更したとき。[フラット ファイル ソース [1]] エラー: データ変換に失敗しました。列「列 10」のデータ変換で、ステータス値 4 とステータス テキスト「テキストが切り捨てられたか、ターゲット コード ページで一致する文字が 1 つ以上ありませんでした。」が返されました。列の変動により、これをより良い方法で解決する方法が問題になりましたか? 新旧両方のフォーマットファイルを同じパッケージで処理する必要がある場合。

ありがとう

4

1 に答える 1

3

私があなたの質問を正しく理解していれば、古いファイル形式または新しいファイル形式のファイル (同じファイル名だと思います) があり、フラット ファイル ソースに古い (10 列) データ ファイル スキーマしかないために失敗しますか? この場合、ブール変数を作成し、isOldFormat のような名前を付けます。次に、制御フローでスクリプト タスクを使用して、10 列か 15 列かを判断します。擬似コードは次のようになります。

1) フラット ファイルを開く 2) 区切り文字に基づいて列を数える 3) 条件ステートメント:

If columns.Count = 10 isOldFormat = True Else If columns.Count = 15 isOldFormat = False Else throw error

次に、新しいファイル形式スキーマを持つ別のデータ フローを作成します (基本的に、古いファイル形式と新しいファイル形式の 2 つのデータ フローがあります)。

この手順の後、優先順位の制約をスクリプト タスクから新しく作成したデータ フローにドラッグし、1 つを古いデータ フローにドラッグします。Predence 制約をダブルクリックして、エバリュエーター操作プロパティを [式] に設定し、[式] ボックスに @isOldFormat == true と入力して、古いフラット ファイル ソースを含むデータ フローへの制約を入力し、@isOldFormat == false を入力します。他のデータ フローの場合。これが行うことは、スクリプト タスクで設定された変数に基づいて、いずれかのデータ フローのみを実行します。

お役に立てれば。

于 2009-12-04T13:59:21.603 に答える